使用POST_CLASS过滤器将类添加到自定义循环中的第一个POST

时间:2016-07-18 作者:tmgale12

我试图在自定义WP\\U查询中向第一篇帖子添加一个类。

我可以使用将类添加到标准WordPress循环的第一篇帖子中;

add_filter( \'post_class\', \'featured_classes\' );
function featured_classes( $classes ) {
global $wp_query;
if( 0 == $wp_query->current_post )
    $classes[] = \'first\';
    return $classes;
}
然而,当我改变$wp_query$featured_posts(自定义查询的名称)类first 适用于所有职位。我不明白为什么会发生这种事。

以下是我的完整代码;

//Add featured post grid
add_action( \'genesis_after_header\', \'post_grid\' );
function post_grid() {    
// Featured post Loop
    $args = array (
        \'post_type\'         => \'blog\',
        \'category_name\'     => \'Featured\',
    );

    $featured_posts = new WP_Query( $args );

    if ( $featured_posts->have_posts() ) {
        while ( $featured_posts->have_posts() ) {
            $featured_posts->the_post(); ?>

            <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a> </div>

     <?php   }
    } else {
        echo "Sorry, no featured posts found";
    }

    wp_reset_postdata();   
}

//Add Post Class Filter
add_filter( \'post_class\', \'featured_classes\' );
function featured_classes( $classes ) {
global $featured_posts;
if( 0 == $featured_posts->current_post )
    $classes[] = \'first\';
    return $classes;
}


genesis();
有人能给我指出正确的方向吗?

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

我认为您可以简单地使用:

post_class( 0 === $featured_posts->current_post ? \'first\' : \'\' );
直接在模板代码中添加第一个类,而不是应用post_class 滤器

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {