Aviso: Propiedad no definida: wpdb :: $ current_post ¿Qué puede estar mal?

2

Estoy trabajando en un sitio de WordPress y uso el siguiente código para mostrar las publicaciones en dos columnas en las páginas de archivo y categoría:

<div id="post-<?php the_ID(); ?>" <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 2 ? 'grid col-340 fit' : 'grid col-340' ); ?>>

Con la depuración establecida en "verdadero", recibí el siguiente aviso:

  

Aviso: Propiedad no definida: wpdb :: $ current_post en D: \ beta \ www.beta.dev \ wp-includes \ wp-db.php en la línea 684

¿Qué puede estar mal con este código? Noté que este aviso apareció con la versión 4+ de WordPress

Cualquier ayuda será muy apreciada. Gracias.

    
pregunta Knott 01.03.2016 - 11:35

2 respuestas

6

Hay problemas con esta parte:

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

No hay propiedad current_post de la clase wpdb , aquí es muy probable que confundas la clase wpdb con la clase WP_Query .

Tampoco nos gustaría que, en general, modifiquemos la propiedad current_post de WP_Query global, seguramente nos "morderá" si nos metemos con los globales ;-)

Tenga en cuenta que la propiedad current_post de WP_Query ya está haciendo el recuento para nosotros con $this->current_post++ ; dentro de next_post() , se llama dentro de the_post() . Consulte aquí . Así que no hay necesidad de aumentarla manualmente (++) dentro del bucle.

Aquí hay un ejemplo que usa el filtro post_class , con la ayuda de una variable static :

add_filter( 'post_class', function( $classes ) 
{
    static $instance = 0;

    if( in_the_loop() )
        $classes[] = ( 0 === $instance++ % 2 ) ? 'even' : 'odd';        

    return $classes;
} );

donde nos dirigimos a las clases de correos en el bucle de consulta principal. Solo recuerda modificar las clases pares / impares y otras restricciones a tus necesidades.

El uso del filtro post_class podría significar una mejor reutilización de las partes de nuestra plantilla.

Actualizar

Parece que estás usando la primera versión de respuesta de @ toscho, creando una costumbre Propiedad current_post (para el conteo) del objeto global wpdb . Luego sugirió usar la propiedad personalizada prefijada, como wpse_post_counter . Pero parece que necesita una inicialización para evitar el aviso de PHP.

@kaiser publicó una gran respuesta aquí que utiliza la propiedad current_post de la propiedad global $wp_query (probablemente no el $wpdb global).

Desde que di una prometo aquí , con respecto a < em> anonymous funciones y global variables, debo reescribirlo para: Ver mi editar aqui - donde usamos la palabra clave use para pasar el objeto global $wp_query .

    
respondido por el birgire 01.03.2016 - 11:52
-2

use get_the_ID() para obtener el ID de publicación actual

<?php echo get_the_ID(); ?>

y así es como se llama la variable global en wp global $wpdb; ;

    
respondido por el user3114253 01.03.2016 - 11:41

Lea otras preguntas en las etiquetas