web-dev-qa-db-ja.com

Post_classフィルタを使ってカスタムループの最初の投稿にクラスを追加する

カスタムWP_Queryの最初の投稿にクラスを追加しようとしています。

標準の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
tmgale12

私はあなたが単に使用できると思います:

post_class( 0 === $featured_posts->current_post ? 'first' : '' );

post_classフィルタを適用する代わりに、最初のクラスをテンプレートコード内に直接追加します。

0
birgire