it-swarm.com.de

Wie verwende ich den Filter-Hook "the_posts" mit einer Funktion, die auf $ this verweist?

Ich verwalte mithilfe von Carbon Fields ereignisbezogene Metadaten (z. B. Ereignisdaten) für bestimmte Posts auf meiner Website, möchte jedoch sicherstellen, dass vergangene Ereignisse nicht in den Feeds meiner Website angezeigt werden. Ich muss den Filter the_posts mit einer Funktion verwenden. Hier ist mein Code:

add_filter("the_posts", "filter_past_events");

function filter_past_events($posts) {
    if ($this->is_single) {
        return $posts;
    }
    if ($this->is_feed) {
        for ($i = count($posts) - 1; $i > -1; $i--) {
            $event_meta = carbon_get_post_meta($posts[$i]->ID, "event_meta");
            if ($event_meta) {
                $is_future = false;
                if (!empty($event_meta[0]["scheduling_blocks"])) {
                    $scheduling_blocks = $event_meta[0]["scheduling_blocks"];
                    for ($j = 0; $j < count($scheduling_blocks); $j++) {
                        if (DateTimeImmutable::createFromFormat("m/d/Y H:i:s", $scheduling_blocks[$j]["start"]) > new DateTimeImmutable()) {
                            $is_future = true;
                        }
                    }
                }
                if (!$is_future) {
                    array_splice($posts, $i, 1);
                }
            }
        }
    }
    return $posts;
}

Ich bekomme Fatal error: Too few arguments to filter_past_events(), 1 passed. Was mache ich falsch? Hat WordPress aufgehört, das WP_Query-Objekt $this an die Funktion zu übergeben?

1
Stuart Simon

Wie Sie in der Dokumentation sehen können, ist das zweite Argument, das an Funktionen übergeben wird, die mit the_posts verknüpft sind, das WP_Query-Objekt.

Um darauf zuzugreifen, müssen Sie das vierte Argument von add_filter(), $accepted_args bis 2 definieren, damit Sie es akzeptieren können.

Dann müssen Sie nur noch 2 Argumente in Ihrer Funktion akzeptieren und das 2. Argument als WP_Query-Objekt verwenden:

function wpse_313327_filter_past_events( $posts, WP_Query $query ) {
    if ( $query->is_single() ) {
        return $posts;
    }

    if ( $query->is_feed() ) {
        // etc. etc.
    }

    return $posts;
}
add_filter( 'the_posts', 'wpse_313327_filter_past_events', 10, 2 );
0
Jacob Peattie