2016-12-27 5 views
0

Я следующий запрос, который я хотел бы передать массив значений для:WordPress Meta Запрос с массивами Мульти Значение

$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
    array(
    'key'  => '_customer_names', 
    'value' => $customer_names, 
    'compare' => '=' 
     ), 
    array(
    'key'  => '_customer_dates', 
    'value' => $customer_dates, 
    'compare' => 'LIKE' 
      ) 
     ) 
    ) 
); 

Например, я хотел бы передать так:

$customer_names = array('John','Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 

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

SELECT * FROM WORDPRESS_POSTS WHERE _customer_names = (John OR Tom OR Simon) AND customer_dates = (20161225 OR 20161226 OR 20161227) 

Однако, на данный момент, даже когда я снять ограничение даты, я не могу найти какие-либо сообщения. Поэтому я хотел подтвердить, что моя логика правильная.

+0

изменения '' get_posts' с новым WP_QUERY' и 'var_dump ($ data-> request) 'для печати запроса, который работал против вашего' args' – Noman

ответ

0

Попробуйте так:

$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
      'relation' => 'AND', 
      array(
       'relation' => 'OR', 
       array(
        'key' => '_customer_names', 
        'value' => 'John', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_names', 
        'value' => 'Tom', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_names', 
        'value' => 'Simon', 
        'compare' => '=' 
       ) 
      ), 

      array(
       'relation' => 'OR', 
       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ), 

       array(
        'key' => '_customer_dates', 
        'value' => '20161225', 
        'compare' => '=' 
       ) 
      ), 
     ) 
    ) 
); 
+0

Спасибо Ravendra, но я не буду знать заранее значения массива, может быть 1 или 100, следовательно, расширяющийся запрос - это не очень хорошая идея , – Colin

+0

в этом случае вы должны подготовить пользовательский запрос и запустить, как этот запрос $ wbdb-> ($ custom_query); –

+0

вы также можете подготовить запрос выше, используя цикл. например $ metaq1 = подготовить массив с использованием цикла, а затем $ metaq2 = подготовить массив с использованием цикла, а затем использовать эти переменные массива в вышеприведенном запросе. Если вы все еще не получите, дайте мне свой адрес электронной почты, я пришлю вам пример кода. –

0

, если вы хотите использовать массив значений, которые необходимо использовать compare с IN пункта.

Адрес: если вы хотите соответствовать точным значениям, попробуйте решение @Ravendra Patel.

использовать также WP_QUERY, потому что он поставляется с основным запросом и предоставить дополнительную помощь, чтобы определить проблему

$customer_names = array('John', 'Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 
$args   = array(
    'post_type'  => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query'  => array(
     array(
      'key'  => '_customer_names', 
      'value' => $customer_names, 
      'compare' => 'IN' 
     ), 
     array(
      'key'  => '_customer_dates', 
      'value' => $customer_dates, 
      'compare' => 'IN' 
     ) 
    ) 
); 
$query   = new WP_QUERY($args); 
echo 'SQL: '.$query->request.'<br>'; // your query against args 
0

попробовать так:

$customer_names = array('John', 'Tom', 'Simon'); 
$customer_dates = array('20161225', '20161225', '20161225'); 

$cm_metaq = array(); 
foreach($customer_names as $cm){ 
    $cm_metaq[] = array('key' => '_customer_names', 'value' => $cm, 'compare' => '='); 
} 
$cd_metaq = array(); 
foreach($customer_dates as $cd){ 
    $cd_metaq[] = array('key' => '_customer_dates', 'value' =>$cd, 'compare' => '='); 
} 


$data = get_posts(array(
    'post_type' => 'custom_type', 
    'post_status' => 'any', 
    'posts_per_page' => 200, 
    'meta_query' => array(
      'relation' => 'AND', 
      array(
       'relation' => 'OR', 
       $cm_metaq 
      ), 

      array(
       'relation' => 'OR', 
       $cd_metaq 
      ), 
     ) 
    ) 
); 
Смежные вопросы