web-dev-qa-db-fra.com

add_filter et remove_filter ajoutés avant et après wp_query

Je viens de commencer avec le développement WordPress et j'ai trouvé le bloc de code suivant en ligne (dans certains tutoriels)

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' );

Je ne suis pas capable de comprendre pourquoi add_filter et remove_filter sont appelés avant et après WP_Query? Dans quel scénario devons-nous utiliser le type de motif ci-dessus?

3
I-M-JM

Cela a été fait pour limiter l'effet de ces filtres à cette requête entre les deux appels.

Il y a probablement d'autres instances de WP_Query lors du chargement de la page et vous ne souhaitez pas modifier leurs résultats.

Imaginez ce qui se passe lorsque vous ne supprimez pas le filtre: tous les appels new WP_Query(); ultérieurs seraient limités à une certaine période. Toutes les publications d'un auteur, toutes les pages, types de publications personnalisées… cela ferait vraiment mal.

Vous n'avez même pas besoin du second appel, vous pouvez supprimer le filtre du premier rappel:

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