Je travaille sur un site WordPress et j'utilise le code suivant pour afficher les articles dans deux colonnes sur les pages d'archives et de catégories:
<div id="post-<?php the_ID(); ?>" <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 2 ? 'grid col-340 fit' : 'grid col-340' ); ?>>
Avec debug réglé sur "true", j'ai eu l'avis suivant:
Remarque: propriété non définie: wpdb :: $ current_post dans D:\beta\www.beta.dev\wp-includes\wp-db.php à la ligne 684
Qu'est-ce qui ne va pas avec ce code? J'ai remarqué que cet avis est apparu avec WordPress version 4+
Toute aide est la bienvenue. Merci.
Il y a des problèmes avec cette partie:
++$GLOBALS['wpdb']->current_post
Il n'y a pas de propriété current_post
de la classe wpdb
; dans ce cas, vous êtes en train de confondre la classe wpdb
avec la classe WP_Query
.
De plus, nous ne voudrions pas en général modifier la propriété current_post
du global WP_Query
, elle pourrait sûrement nous "mordre" si nous gâchions les globals ;-)
Notez que la propriété current_post
de WP_Query
fait déjà le décompte pour nous avec $this->current_post++
; dans next_post()
, cela s'appelle dans the_post()
. Voir ici . Il n’est donc pas nécessaire de l’augmenter manuellement (++) dans la boucle.
Voici un exemple d'utilisation du filtre post_class
, à l'aide d'une variable static :
add_filter( 'post_class', function( $classes )
{
static $instance = 0;
if( in_the_loop() )
$classes[] = ( 0 === $instance++ % 2 ) ? 'even' : 'odd';
return $classes;
} );
où nous ciblons les classes de publication dans la boucle de requête principale. N'oubliez pas de modifier les classes paires/impaires et d'autres restrictions en fonction de vos besoins.
L'utilisation du filtre post_class
pourrait permettre une meilleure réutilisation des éléments de modèle.
Il semble que vous utilisiez la première version de one-liner answer ) de @ toscho, créant une propriété current_post
personnalisée (pour le comptage) de l'objet global wpdb
. Il suggère ensuite d'utiliser la propriété personnalisée préfixée, telle que wpse_post_counter
. Mais il semble qu'il ait besoin d'une initialisation pour éviter la remarque PHP.
@kaiser a envoyé une excellente réponse ici qui utilise la propriété current_post
du $wp_query
global (probablement pas le $wpdb
global).
Depuis que j'ai donné un promesse ici , concernant anonymous fonctions et global variables, je devrais le réécrire pour: Voir mon éditer ici - où nous utilisons la variable use
mot clé à transmettre à l'objet global $wp_query
.