2015-02-09 1 views
0

Я создаю в WP пользовательское поле с именем = 'add_info' (type = Repeater) В этом поле есть подполе, называемое комментариями (name = ai_comment, type = text)Wordpress: meta_query с настраиваемыми полями (сообщения получают по подполе) (WP_QUERY)

Как я могу получить только сообщения с комментариями! = NULL/EMPTY?

$args = array(
      'post_type'   => 'cpt_articles', 
      'meta_query'  => array(
             array(
              'key'  => 'add_info_%_ai_comment', 
              'value'  => '""', 
              'compare' => '!=' 
             ) 
            ), 
      'orderby'   => 'meta_value', 
      'order'    => 'DESC', 
      'posts_per_page' => 10, 
     ); 

Маленьких немного странное решение (additional_tests _% _ acomment) я нашел здесь: http://www.advancedcustomfields.com/resources/how-to-query-posts-filtered-by-custom-field-values/#example-5

Но оленью кожу работает ... дисплей пустого

здесь свалка ..

string(431) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'cpt_articles' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND ((wp_postmeta.meta_key = 'add_info_%_ai_comment' AND CAST(wp_postmeta.meta_value AS CHAR) != '\"\"')) GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 10" 
+0

попробуйте с помощью '' value '=>' ', вместо двух двойных кавычек. – vaso123

+0

@lolka_bolka У меня уже этот try ... output: AND CAST (wp_postmeta.meta_value AS CHAR)! = '') Это очень багги Я также попробовал 'value' => 'NULL' с 'compage' = > 'IS NOT' и 'compage' => '! =' не работает: -/ – kaito

ответ

0

Попробуйте это, он должен работать, я думаю:

$sql = "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID" 
    . " FROM wp_posts" 
    . " INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)" 
    . " WHERE 1=1" 
    . " AND wp_posts.post_type = 'cpt_articles'" 
    . " AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')" 
    . " AND ((wp_postmeta.meta_key LIKE 'add_info_%_ai_comment' AND wp_postmeta.meta_value IS NOT NULL AND wp_postmeta.meta_value != '')" 
    . " GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 10"; 

Вы не применяете этот фильтр, что находится в учебнике. Таким образом, ваш wp_postmeta.meta_key = не будет заменен на wp_postmeta.meta_key LIKE, а подстановочные знаки не будут работать. Во-вторых, проверьте, как я использую NOT NULL и сравнение строк.

Вам не нужно указывать свое поле в строку, так как это уже поле LONGTEXT. Попробуйте это прямо в MySql и скажите мне результаты в комментарии. (Когда вы хотите использовать его непосредственно в mysql, сначала повторяет его в PHP, это строка PHP в моем ответе).

+0

благодарит за ваш ответ. Да, я знаю правильный statemant SQL. IS NOT NULL :-) Это был только дамп из WP_QUERY. Это причина, по которой iam выписывает вам «очень багги» из WP (последний комментарий) ........ ваш запрос работает с небольшим исправлением очень красивым (у вас слишком много одной и одной запятой) теперь я получаю правильный результат из 2 сообщений с комментариями => n1 .......... Возможно ли, что я использую $ sql с WP_Query, чтобы wp создавал нормальный объект, и я могу запросить vars как ? – kaito

+0

okay Я теперь добавил функцию в functions.php. У вас есть право ... я забыл добавить фильтр. большое спасибо!!!! – kaito