web-dev-qa-db-ja.com

カテゴリXから最新の投稿を除外し、残りを表示

すべての投稿を表示したいが、[おすすめ]カテゴリから最新の投稿のみを除外します。この猫の他の投稿は表示されるはずです。これを達成するためにループに何を追加すればよいのでしょうか。私は他の猫からの他のすべての記事も同様に表示されるようにしたいです。

1
Wordpwess

デフォルトでは、ループは投稿を日付の降順で取得するので、次のようなことができます。

ループの外側:

$featured_flag = false;

ループの内側:

if(in_category('Featured')) {
    if($featured_flag) {
        the_content();
    }
    else {
        $featured_flag = true;
    }
}
else {
    the_content();
}

Featuredカテゴリからの投稿が最初に検出された(つまり最新の)投稿は無視され、$featured_flagtrueに設定されます。それ以降のループthe_content()までの時間が表示されます。

編集:ページネーションを考慮して、$featured_flag$_SESSION変数に変更できます。そうすることでtrue/falseの値は複数のページに渡って持続し、一度trueの投稿に設定されると正しく表示され続けます。私のやり方の誤りを指摘してくれてありがとうBainternet :)

1
ggutenberg

しばらく前に私は 特定のカテゴリ で最新の投稿を取得するという単純な関数を投稿しました。

function get_lastest_post_of_category($cat){
    $args = array( 'posts_per_page' => 1, 'order'=> 'DESC', 'orderby' => 'date', 'category__in' => (array)$cat);
    $post_is = get_posts( $args );
    return $post_is[0]->ID;
}

そのため、その関数を取得したら、WP_Queryまたはquery_postsを使用してpost__not_inパラメータを使用し、その投稿を除外することができます。

query_posts(array(`post__not_in` => array(get_lastest_post_of_category($CAT_ID))));

$ CAT_IDを実際のカテゴリIDに変更するだけです。

1
Bainternet