Überprüfen Sie, ob die Variable im Filter festgelegt ist
-
16-10-2019 - |
Frage
Dank Ihrer Vorschläge habe ich WP_DEBUG aktiviert und Fehler mit meinem Plugin entdeckt. Ich habe einen Filter, um Posts nach Stimmen zu sortieren. Ich benutze es, wenn die sort
Der URL -Parameter ist eingeschaltet.
add_filter( 'posts_where', 'votes', 10, 2 );
Ich habe früher bekommen Undefined index: sort
Daher habe ich meine Funktion geändert, um zuerst zu überprüfen, ob die Variable festgelegt ist.
function votes( $where, $query )
{
$sort = array_key_exists('sort', $query->query_vars) ? $_GET['sort'] : null;
if ( isset($sort) ) {
$where .= " AND $sort >= votes";
}
return $where;
}
Das funktioniert gut, aber ich bin nicht zuversichtlich, ob es richtig ist. Ich frage mich, ob es eine bessere Methode gibt, dies zu tun.
Lösung
Die Variable, die Sie benannt haben $query
Ist tatsächlich die WP_Query -Instanz, in der Filter darauf angewendet werden.
Sie können einfach seine Funktion aufrufen get
Um Abfragen -Vars abzurufen.
Zum Beispiel:
function votes( $where, $query )
{
$sort = $query->get('sort');
if (!empty($sort)
$where .= " AND $sort >= votes";
return $where;
}
Andere Tipps
Wenn Sie nach suchen nach $query->query_vars
zuerst aber dann benutze $_GET['sort']
Später haben Sie gerade die falsche Variable überprüft oder verwendet. Ich denke, das ist gerade passiert, als Sie das Drehbuch bearbeitet haben.
Sie wollten wahrscheinlich Folgendes schreiben:
$sort = array_key_exists('sort', $query->query_vars) ? $query->query_vars['sort'] : null;