web-dev-qa-db-ja.com

指定した期間の経過後にホームページから特定のカテゴリの投稿を削除するにはどうすればよいですか。

一定期間経過後にホームページから特定のカテゴリの投稿を削除する方法を知りたい(ただし、投稿の有効期限は切れない)。

私のサイト は現在、カテゴリ "Basic"からの最新のブログ投稿を表示するように設定されています。

「基本」カテゴリには、次のサブカテゴリがあります。

基本

- お知らせ

- 会社固有

- 産業

- その他

- 第三者

- - フィスコ

"Third Party"サブカテゴリには毎週投稿があります。他のすべてのサブカテゴリを組み合わせると、週ごとの投稿になります。その結果、私のホームページのコンテンツの半分は "Third Party"サブカテゴリからのものです。 14日後に「第三者」の投稿がホームページから削除されるように設定します。

1
cyoung1989

これは簡単に見えますが、残念ながらそうではありません。 wp_query では複数の引数に基づいて投稿を除外することはできません(この場合、カテゴリと日付)。複数の引数に基づいて選択できますが、除外はできません。それで、あなたが望むことをするためには、あなたは2つの引数を1つにまとめなければなりません。概念的には、不要な投稿を選択してから、そのリストを使用してそれらのIDに基づいて投稿を除外します。さあ:

add_action ('pre_get_posts', 'wpse308323_multiple_exclude', 10, 1);
function wpse308323_multiple_exclude ($query) {
  // only do this on home page for main query
  if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
    // define posts to exclude and get them
    $args = array (
      'category_name' => 'third-party',
      'date_query' => array(
        array(
          'before' => '2 weeks ago'
           )
        )
      );
    $q2 = new WP_Query ($args);
    // extract an array of ID's from the posts retrieved in $q2
    $q2_ids = wp_list_pluck ($q2->$posts,ID);
    // exclude these ID's from the main query
    $query->set ('post__not_in', $q2_ids);
    }
  }

免責事項:上記のコードは概念を示すために与えられています。まだテストしていないので、デバッグが必要になるかもしれません。いくつかの参考文献:

2
cjbj