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' );
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.
$current
liegt außerhalb des Gültigkeitsbereichs. 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' );