Получите Один Идентификатор Сообщения На Основе Точного Совпадения 1 Или Нескольких Метазначений.

  • Автор темы Nadsaf
  • Обновлено
  • 22, Oct 2024
  • #1

Я хотел бы найти идентификатор сообщения на основе точного совпадения метазначений (может быть больше 1). Все примеры, которые я нашел, показывают поиск идентификатора сообщения по одному метазначению.

В моем примере я хотел бы передать массив значений и найти точное совпадение. Ниже приведено то, что у меня есть на данный момент: можно найти правильный идентификатор сообщения, но он не совпадает точно. Он возвращает идентификатор сообщения, если любой значений совпадают в массиве ниже. мне нужно, чтобы оно соответствовало все ценностей.

 
 
 post_id   meta_key          meta_value
122       _some_meta_key    1
122       _some_meta_key    2
122       _some_meta_key    8
 

Согласно кодексу, post_id meta_key meta_value 122 _some_meta_key 1 122 _some_meta_key 2 122 _some_meta_key 3

Итак, если моя таблица wp_postmeta выглядела следующим образом, она должна соответствовать списку сообщений с идентификатором 122

Array support is limited to a compare value of 'IN', 'NOT IN', 'BETWEEN', or 'NOT BETWEEN'

Но нет если бы это выглядело так (нет 3)

// these values are dynamic, so multiple meta_query arrays are not an option $array_of_values_to_match = array( '1', '2', '3' ); $args = array( 'post_type' => 'post', 'meta_query' => array( array( 'key' => '_some_meta_key', // they all have the same meta_key 'value' => $array_of_values_to_match, 'compare' => 'IN' // can't use = when passing in an array ), ), ); $posts = get_posts( $args );

#мета-запрос

Nadsaf


Рег
16 Feb, 2007

Тем
73

Постов
207

Баллов
592
  • 25, Oct 2024
  • #2

Если вы хотите сопоставить их все, вам нужно добавить

 
 $array_of_values_to_match = array( '1', '2', '3' );

// set some initial args
$args = array(

'post_type' => 'post',

'meta_query' => array(),
);

// if there's more than 1 value, add the relation arg
if( 1 < count( $array_of_values_to_match ) ){

$args['meta_query']['relation'] = 'AND';
}

// for each of the array values, add a meta query for that value
foreach( $array_of_values_to_match as $val ){

$args['meta_query'][] = array(

'key' => '_some_meta_key',

'value' => $val,

'compare' => '='

);
}

$posts = get_posts( $args );
 
and check for each value separately:

$args = array( 'post_type' => 'post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => '_some_meta_key', 'value' => 1, 'compare' => '=' ), array( 'key' => '_some_meta_key', 'value' => 2, 'compare' => '=' ), array( 'key' => '_some_meta_key', 'value' => 3, 'compare' => '=' ), ), );

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

'relation' => 'AND'
 

Sth


Рег
07 Sep, 2006

Тем
77

Постов
200

Баллов
615
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно