wake-up-neo.net

add_filter und remove_filter wurden vor und nach wp_query hinzugefügt

Ich habe gerade mit der WordPress-Entwicklung begonnen und folgenden Codeblock online gefunden (in einem Tutorial)

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

Ich verstehe nicht warum add_filter und remove_filter werden vor und nach WP_Query aufgerufen? In welchem ​​Szenario müssen wir die obigen Muster verwenden?

3
I-M-JM

Dies wurde durchgeführt, um die Wirkung dieser Filter auf diese eine Abfrage zwischen beiden Aufrufen zu beschränken.

Wahrscheinlich gibt es beim Laden der Seite noch weitere WP_Query-Instanzen, und Sie möchten deren Ergebnisse nicht ändern.

Stellen Sie sich vor, was passiert, wenn Sie den Filter nicht entfernen: Alle späteren new WP_Query();-Aufrufe wären auf einen bestimmten Zeitraum beschränkt. Alle Beiträge eines Autors, alle Seiten, benutzerdefinierte Beitragstypen ... das würde wirklich weh tun.

Sie brauchen nicht einmal den zweiten Anruf, sondern können den Filter aus dem ersten Rückruf entfernen:

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