web-dev-qa-db-ja.com

カテゴリの最新の投稿が一般的に最新の投稿である場合は、カテゴリの最初の投稿をスキップします

現在私はいくつかのカスタマイズされたブログのテンプレート作成に取り組んでいて、カテゴリの最新の投稿がブログ全体の最新の投稿でもあるかどうかを調べる方法があるかどうか疑問に思いました。

enter image description here 

  • (1)はブログ全体の最新の投稿で、カテゴリ(B)に属しています。
  • (2)は、カテゴリ(A)の最新の投稿です。
  • (3)はカテゴリ(B)の最新の投稿であり、(1)もです。

基本的に私はこれをどうやってやるかと頼んでいます:(3)=(1)ならば、(3)を飛ばしてカテゴリの中で2番目に新しい投稿を表示します


上記の情報はより一般的/普遍的ですが、特に私のブログに関する追加情報。

私のブログには、ブログから除外され、特定のページにのみ表示されるカテゴリもあります。最初の質問の解決策全体からこのカテゴリをどのように除外しますか?単に'cat' => -123,を書くだけで十分でしょうか?

1
marvinpoo

そのため、これを行う最も簡単な方法は、最初の投稿(1)のIDを格納することです。次に、各カテゴリループに次のようにpost__not_inプロパティを使用できます。

// inside the first loop at the top.
$latest_post_id = get_the_ID();

// WP_Query for fetching each category
$category_query = new WP_Query( [
  // other parameters
  'post__not_in' => [ $latest_post_id ],
] );

WP_Queryでカテゴリを除外するために、カテゴリIDの配列をとるcategory__not_inを使うことができます。 WP_Query のwordpressコーデックをチェックする価値は間違いありません。

3
jrmd

2番目のクエリでは 'post__not_in'パラメータを使用するだけです。

$query1 = new WP_Query...
$used_posts = array();

while ( $query1->have_posts() ) :
    $query1->the_post();
    $used_posts[]= get_the_ID();
    ...
endwhile;

$query2 = new WP_Query( array(
    'post__not_in' => $used_posts,
...
) );
1