Melhorando a performance de campos repetidores do ACF

Ontem falamos sobre o Campo Repetidor do Advanced Custom Fields, ou repeater field. Como dissemos, ele pode apresentar problemas de performance devido ao número de consultas ao banco de dados.

Quando o WP está buscando os metadados no seu tema, ele faz uma consulta para cada linha do seu campo repetidor (bizarro, é, eu sei). Usando o plugin Query Monitor, fiz a seguinte leitura em um site que estava trabalhando:

Plugin Query Monitor mostrando 532 consultas e tempo total de 137,9ms

Para melhorar essas consultas, primeiro tive que ver como que o ACF armazena o campo repetidor e seus subcampos. Primeiro ele grava o número de subcampos que o campo repetidor tem:

2 linhas do banco de dados mostrando o número de subcampos

O ACF sempre armazena uma linha com a refrência ao ID do campo (field_5d34ae20e0cd5). Neste caso nós temos 3 subcampos armazenados. Depois ele guarda os subcampos com índice, começando do zero:

Linhas do banco de dados com subcampos do ACF Repetidor

Tentei então no tema buscar os metadados usando a função get_post_meta.

PHP

Depois dessa alteração fui verificar o query monitor e o número de consultas caiu pela metade:

Plugin Query Monitor mostrando 242 consultas e tempo total de 73,1ms

Às vezes uma pequena alteração no código pode trazer grandes resultados positivos.

Até a próxima se não for antes!