web-dev-qa-db-ja.com

wp_queryの前後にadd_filterとremove_filterが追加されました

私は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の前後に呼び出されるのですか?どのようなシナリオで、上記の種類のパターンを使用する必要がありますか?

3
I-M-JM

これは、両方の呼び出しの間にこれらのフィルターの効果をこの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;
}
3
fuxia