一定期間経過後にホームページから特定のカテゴリの投稿を削除する方法を知りたい(ただし、投稿の有効期限は切れない)。
私のサイト は現在、カテゴリ "Basic"からの最新のブログ投稿を表示するように設定されています。
「基本」カテゴリには、次のサブカテゴリがあります。
基本
- お知らせ
- 会社固有
- 産業
- その他
- 第三者
- - フィスコ
"Third Party"サブカテゴリには毎週投稿があります。他のすべてのサブカテゴリを組み合わせると、週ごとの投稿になります。その結果、私のホームページのコンテンツの半分は "Third Party"サブカテゴリからのものです。 14日後に「第三者」の投稿がホームページから削除されるように設定します。
これは簡単に見えますが、残念ながらそうではありません。 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);
}
}
免責事項:上記のコードは概念を示すために与えられています。まだテストしていないので、デバッグが必要になるかもしれません。いくつかの参考文献:
pre_gest_posts
のしくみstrtotime
も参照してください(これはかなり複雑になる可能性があります)wp_list_pluck
のしくみ