注意:未定义的属性:wpdb::$CURRENT_POST哪里可能是错误的?

时间:2016-03-01 作者:Knott

我正在WordPress网站上工作,我使用以下代码在归档页和分类页的两列中显示帖子:

<div id="post-<?php the_ID(); ?>" <?php post_class( 0 === ++$GLOBALS[\'wpdb\']->current_post % 2 ? \'grid col-340 fit\' : \'grid col-340\' ); ?>>
当debug设置为“true”时,我收到以下通知:

注意:未定义的属性:wpdb::$current\\u post in D:\\beta\\www.beta。dev\\wp包括\\wp db。php在线684

此代码可能有什么问题?我注意到这个通知出现在WordPress版本4中+

任何帮助都将不胜感激。谢谢

2 个回复
最合适的回答,由SO网友:birgire 整理而成

此部分存在问题:

 ++$GLOBALS[\'wpdb\']->current_post
没有current_post 的属性wpdb 同学们,你们很可能把wpdb 使用WP_Query

此外,我们一般不希望修改current_post 全球的财产WP_Query, 如果我们和全球人打交道,它肯定会“咬我们”;-)

请注意current_post 的属性WP_Query 已经在为我们计算了$this->current_post++; 在…内next_post(), 这叫做内在the_post(). 看见here. 因此,无需在循环中手动(++)增加它。

下面是一个使用post_class 过滤器,借助静态变量:

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

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

    return $classes;
} );
我们在主查询循环中以post类为目标。请记住根据需要修改偶数/奇数类和其他限制。

使用post_class 过滤器可能意味着我们的模板部件具有更好的可重用性。

更新

看起来您使用的是@toscho的单行程序的第一个版本answer, 创建自定义current_post 全局属性(用于计数)wpdb 对象然后,他建议使用带前缀的自定义属性,如wpse_post_counter. 但它似乎需要初始化以避免PHP通知。

@kaiser确实给出了一个很好的回答here 使用current_post 全球的财产$wp_query (可能不是全球$wpdb).

自从我给了promise here, 关于匿名函数和全局变量,我应该将其重写为:See myedit here- 我们使用use 要传递到全局的关键字$wp_query 对象

SO网友:user3114253

使用get_the_ID() 获取当前帖子id

<?php echo get_the_ID(); ?>
这就是在wp中调用全局变量的方式global $wpdb;;