私はWordPress開発を始めたばかりで、次のコードブロックをオンラインで見つけました(チュートリアルで)。
function filter_where( $where = '' ) { // posts in the last 30 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$args = array(
'posts_per_page' => -1,
);
$the_query = new WP_Query($args);
remove_filter( 'posts_where', 'filter_where' );
私は理解できません なぜ add_filterとremove_filterがWP_Queryの前後に呼び出されるのですか?どのようなシナリオで、上記の種類のパターンを使用する必要がありますか?
これは、両方の呼び出しの間にこれらのフィルターの効果をこの1つの照会に制限するために行われました。
おそらく、ページの読み込み中にWP_Query
の他のインスタンスがあるかもしれません、そしてあなたはそれらの結果を変更したくないでしょう。
フィルタを削除しないとどうなるか想像してみてください。それ以降のnew WP_Query();
呼び出しはすべて特定の日付期間に制限されます。作者からのすべての投稿、すべてのページ、カスタム投稿の種類…それは本当に痛いでしょう。
2回目の呼び出しも必要ありません。最初のコールバックからフィルタを削除できます。
function filter_where( $where = '' )
{
remove_filter( current_filter(), __FUNCTION__ );
// posts in the last 30 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
return $where;
}