Muss Plugin verursachen Query Error

Ich habe ein MU-Plugin erstellt, das nur die Posts von bestimmten Tags in der Schleife anzeigt:

function custom_tags( $query ) { $query->set( 'tag', array( 'custom', 'general' ) ); } add_action( 'pre_get_posts', 'custom_tags' ); 

Es funktioniert gut, wenn ich das Array entferne und nur nach einem Tag suche, aber wie bekomme ich es mit mehr als einem Tag zu arbeiten, wie ich oben versuche?

Der Fehler, den ich bekomme, ist:

Warning: strpos() expects parameter 1 to be string, array given in /srv/users/s/wp-includes/query.php on line 1966

Warning: preg_split() expects parameter 2 to be string, array given in /srv/users/s/wp-includes/query.php on line 1967

Aktualisierter Code:

 $current = substr($_SERVER[HTTP_HOST], 0, -4); function custom_tags( $query ) { $query->set( 'tag', 'general,{$current}' ); } add_action( 'pre_get_posts', 'custom_tags' ); 

Solutions Collecting From Web of "Muss Plugin verursachen Query Error"

Wie Milo (und Ihre Fehler) aufzeigen: Sie übergeben ein Array, wo eine Zeichenfolge erwartet wird. Gemäß WP_Query-Tag-Parameter

Zeige Beiträge, die bestimmten Tags zugeordnet sind.

  • tag ( string ) – verwende tag slug.

Um dies zu umgehen, müssen Sie nur eine durch Komma getrennte Zeichenfolge übergeben:

 function custom_tags( $query ) { $query->set( 'tag', 'custom,general' ); } add_action( 'pre_get_posts', 'custom_tags' ); 

Erstellen Sie eine ordnungsgemäße tax_query , zum Beispiel:

 'tax_query' => array( array( 'taxonomy' => 'people', 'field' => 'slug', 'terms' => 'bob', ), ), 

Aber Ihr Code “update code” wird auch aus anderen Gründen fehlschlagen.

  1. $current liegt außerhalb des Gültigkeitsbereichs.
  2. Und Ihre Variable wird nicht in einfache Anführungszeichen erweitert

Die nackten Knochen, die Sie brauchen, sind:

 function custom_tags( $query ) { $current = substr($_SERVER[HTTP_HOST], 0, -4); $query->set( 'tag', "general,{$current}" ); } add_action( 'pre_get_posts', 'custom_tags' ); 

Aber wie erwähnt, würde ich eine korrekte tax_query erstellen

 function custom_tags( $query ) { $current = substr($_SERVER[HTTP_HOST], 0, -4); $tax = array( array( 'taxonomy' => 'tag', 'field' => 'slug', 'terms' => $current, 'operator' => 'IN' // This is default ), ); $query->set( 'tag', "general,{$current}" ); } add_action( 'pre_get_posts', 'custom_tags' ); 

Der Operator kann geändert werden, um ein anderes Verhalten zu erhalten:

Operator ( String ) – Zu testender Operator. Mögliche Werte sind ‘IN’, ‘NICHT IN’, ‘UND’, ‘EXISTEN’ und ‘NICHT VORHANDEN’. Standardwert ist ‘IN’.

Und Ihr Code wird nur bei jeder Abfrage auf der Site ausgeführt. Das wird viele Dinge verändern und wird sicherlich Dinge brechen. Sie müssen es nur auf die Orte beschränken, an denen Sie es benötigen. Ich weiß nicht genau, wo oder wann das laufen soll, aber das sollte ein Anfang sein:

 function custom_tags( $query ) { if (is_admin() || $query->is_main_query() ) { return; } $current = substr($_SERVER[HTTP_HOST], 0, -4); $tax = array( array( 'taxonomy' => 'tag', 'field' => 'slug', 'terms' => $current, 'operator' => 'IN' // This is default ), ); $query->set( 'tag', "general,{$current}" ); } add_action( 'pre_get_posts', 'custom_tags' );