Значение ключа meta_query из массива

У меня есть пользовательский тип сообщения, называемый «игра» с некоторыми полями ACF. Одним из полей является объект Post (называемый review_link), который принимает сообщения из категории «обзоры». Еще одно поле – это поле таксономии (называемое гаметагами), которое ищет таксономию post_tag «сообщений»,

Это то, чего я пытаюсь достичь:

  1. Всякий раз, когда вы читаете сообщение (post_type = post) в разделе «Отзывы», чтобы иметь возможность добавлять информацию на боковой панели, из игры (post_type = game), которая имеет эту конкретную запись в поле «Почтовый объект».

  2. Всякий раз, когда вы читаете сообщение (post_type = post) из любой категории, чтобы иметь возможность получать те сообщения, а также просматривать поля ACF (post_type = game) и, в частности, в поле таксономии, находить любые соответствующие теги, а затем показать некоторую информацию о игре.

Мой код для случая 1 следующий, и он отлично работает:

$reviewID = $post->ID; if(in_category('reviews') ) { $reviewArgs = array( 'post_type' => 'game', 'meta_query' => array( array( 'key' => 'review_link', 'value' => ''.$reviewID.'', 'compare' => 'LIKE' ) ) ); } 

Теперь для случая 2 я пробовал следующее:

 $tag_ids = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); $reviewArgs = array( 'post_type' => 'game', 'meta_query' => array( array( 'key' => 'gametags', 'value' => $tag_ids, 'compare' => 'IN' ) ) ); 

$ Tag_ids для примера post: 818,436,435,43,46,77. Если я заменил $ tag_ids в указанном выше коде на 435, он будет соответствовать. Но если я попытаюсь добавить его как массив, это не так. Я также попробовал сериализацию массива, зацикливание массива и т. Д. Ничего из этого не работает. Я мог бы создать массив мета-запросов, но дело в том, что количество тегов в каждом сообщении является случайным. Я также попытался преобразовать массив в строку и использовать «LIKE» вместо «IN» и ничего.

На самом деле приведенный выше код выдает предупреждение: Warning: trim () ожидает, что параметр 1 будет строкой, массив указан в /…/public_html/wp-includes/class-wp-meta-query.php в строке 594

Я пробовал почти все, чтобы сделать работу 2 и не смог. Из того, что я понимаю, meta_query работает не так, как ожидалось, когда мета-значение является массивом, хотя Codex указывает, что он может быть массивом. Все приведенные выше коды размещены в sidebar.php.

Любые подсказки подсказок будут указаны

заранее спасибо

Я не знаю, можно ли получить один массив для сравнения с другим напрямую, но вы можете создать цикл для создания массива meta_query который будет проверять каждый идентификатор в поле отдельно:

 $tag_ids = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); $meta_query = array('relation' => 'OR'); foreach ($tags_ids as $tag_id) { $meta_query[] = array( 'key' => 'gametags', 'value' => $tag_id, 'compare' => 'IN' ); } $reviewArgs = array( 'post_type' => 'game', 'meta_query' => $meta_query ); 

Примечание. Это может привести к ошибкам, если для сообщения не установлены теги, поэтому вы можете добавить альтернативную обработку для этого случая.

EDIT: попробуйте это, чтобы проверить точные соответствия позже …

 $review_query = new WP_Query( $reviewArgs ); while( $review_query->have_posts() ) { $review_query->the_post(); global $post; $checkmatch = false; $gametags = get_post_meta($post->ID,'gametags'); if (!is_array($gametags)) {$gametags = explode(',',$gametags);} foreach ($tags_ids as $tag_id) { if (in_array($tag_id,$gametags)) {$checkmatch = true;} } if ($checkmatch) { // echo output } } 

Поскольку $tag_ids = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); возвращает массив, вы должны использовать его как

 $reviewArgs = array( 'post_type' => 'game', 'meta_query' => array( array( 'key' => 'gametags', 'value' => $tag_ids, 'compare' => 'IN' ) ) ); 

У вас есть metakeys gametags для игр после игры? Также вы используете WP_Query? Или get_posts ()?