Должен использовать плагин, вызывающий ошибку запроса

Я создал MU Plugin, который будет отображать сообщения только из определенных тегов в цикле:

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

Он отлично работает, когда я удаляю массив и проверяю только 1 тег, но как мне заставить его работать с более чем 1 тегом, как я пытаюсь выше?

Ошибка, которую я получаю:

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

Обновленный код:

 $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 "Должен использовать плагин, вызывающий ошибку запроса"

Как указывает Мило (и ваши ошибки): вы передаете массив, в котором ожидается строка. Согласно параметру тега WP_Query

Показывать сообщения, связанные с определенными тегами.

  • tag ( string ) – использовать тег slug.

Чтобы обойти это, вам просто нужно передать строку, разделенную запятой:

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

Создайте надлежащий tax_query , например:

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

Но ваш код «код обновления» будет сбой по другим причинам.

  1. $current выходит за рамки.
  2. И ваша переменная не будет расширяться внутри одинарных кавычек

Изменения в голых костях вам нужны:

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

Но, как уже упоминалось, я бы создал правильный tax_query

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

Оператор может быть изменен, чтобы получить другое поведение:

operator ( string ) – Оператор для проверки. Возможные значения: «IN», «NOT IN», «AND», «EXISTS» и «NOT EXISTS». Значение по умолчанию – «IN».

И ваш код будет работать на каждом запросе на сайте. Это многое изменит , и это, безусловно, нарушит все. Вам нужно ограничить его только теми местами, в которых вы нуждаетесь. Я не знаю точно, где или когда это должно запускаться, но это должно быть началом:

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