Aviso: propriedade indefinida: wpdb :: $ current_post O que pode estar errado?

Estou trabalhando em um site WordPress e uso o seguinte código para mostrar posts em duas colunas em páginas de arquivo e categoria:

<div id="post-" current_post % 2 ? 'grid col-340 fit' : 'grid col-340' ); ?>> 

Com o debug configurado para “true”, recebi o seguinte aviso:

Aviso: propriedade indefinida: wpdb :: $ current_post em D: \ beta \ www.beta.dev \ wp-includes \ wp-db.php na linha 684

O que pode ser errado com este código? Notei que este aviso apareceu com o WordPress versão 4+

Qualquer ajuda será muito apreciada. Obrigado.

Solutions Collecting From Web of "Aviso: propriedade indefinida: wpdb :: $ current_post O que pode estar errado?"

Há problemas com esta parte:

  ++$GLOBALS['wpdb']->current_post 

Não há nenhuma propriedade current_post da class wpdb , aqui provavelmente você confunde a class wpdb com a class WP_Query .

Além disso, não queremos, em geral, modificar a propriedade current_post do WP_Query global, certamente poderia “nos morder” se nos mexermos com os globals 😉

Observe que a propriedade current_post de WP_Query já está fazendo a contagem para nós com $this->current_post++ ; dentro de next_post() , isso é chamado dentro the_post() . Veja aqui . Portanto, não há necessidade de aumentá-lo manualmente (++) dentro do loop.

Aqui está um exemplo usando o filtro post_class , com a ajuda de uma variável estática :

 add_filter( 'post_class', function( $classs ) { static $instance = 0; if( in_the_loop() ) $classs[] = ( 0 === $instance++ % 2 ) ? 'even' : 'odd'; return $classs; } ); 

onde alvejamos as classs de postagem no loop de consulta principal. Basta lembrar de modificar as classs pares / ímpares e outras restrições às suas necessidades.

Usar o filtro post_class pode significar melhor reutilização para nossas partes de modelo.

Atualizar

Parece que você está usando a primeira versão da resposta one-liner do @ toscho, criando uma propriedade current_post personalizada (para contar) do object global wpdb . Ele sugeriu então usar a propriedade personalizada prefixada, como wpse_post_counter . Mas parece que precisa de uma boot para evitar a notificação PHP.

@kaiser publicou uma ótima resposta aqui que usa a propriedade current_post do $wp_query global (provavelmente não o $wpdb global).

Como eu dei uma promise aqui , no que diz respeito a funções anônimas e variables globais , eu deveria reescrevê-lo para: Veja minha edição aqui – onde usamos a palavra-chave de use para passar no object global $wp_query .

use get_the_ID() para obter o ID da postagem atual

 < ?php echo get_the_ID(); ?> 

e é assim que você chama a variável Global no wp global $wpdb; ;