为什么WP_QUERY不搜索用OR分隔的两个‘META_QUERY’键?

时间:2016-11-28 作者:Prasad Patel

我使用编写了一个搜索查询WP_Query, 我在哪里搜索2meta_query 值如下:

$keyword = $_GET[\'tewa_search\'];
$institute_name = get_user_meta($user_ID, \'inistitute_name\', TRUE);

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$args = [
    \'post_type\' => \'messages\',
    \'meta_query\' => [
        \'relation\' => \'OR\',
        [
            \'key\' => \'inistitute_name\',
            \'value\' => [ $institute_name ],
            \'compare\' => \'IN\',
        ],
        [
            //course values stored as ID\'s like 200, 300 in database
            \'key\' => \'course\',
            //Single course ID if user types \'java\' then I can get only single course ID
            \'value\' => $keyword,
            \'compare\' => \'LIKE\',
        ],
    ],
    \'posts_per_page\' => -1,
    \'paged\' => $paged,
    \'post_status\' => $status,
];
$the_query = new WP_Query($args);
在存储meta_key \'course\' 如果用户选择多个课程,则相应的课程ID将存储在数据库中,假设用户选择2个课程,则存储2个课程ID,并用逗号(100200)分隔。搜索时,如果用户输入课程名称,我将获得相应的课程ID,然后使用存储的课程ID进行搜索,因为课程ID用逗号分隔(100、200、300)。

但是我的查询没有按预期工作,有人能告诉我代码中有什么错误吗?

1 个回复
SO网友:Prasad Patel

我最终得到了一个解决方案,在保存帖子的同时对代码进行了一些更改,我将课程存储为类似“100、200、300”的字符串,如果用户输入关键字,如果该关键字与课程匹配,那么我将获得相应的课程ID,然后使用带有以下参数的WP\\U查询:

  $args = array(
    \'post_type\' => \'messages\',
    \'meta_query\' => array (
    \'relation\' => \'AND\',
     array(
            \'key\' => \'inistitute_name\',
            \'value\' => array ($institute_name),
            \'compare\' => \'IN\'
          ),
    array(
       \'key\' => \'course\', //course values stored as ID\'s like 200, 300 in database
       \'value\' => $keyword, //Single course ID if user types \'java\' then I can get only single course ID 
       \'compare\' => \'LIKE\'
      )
    ),
   \'posts_per_page\' => -1,
   \'paged\' => $paged,
   \'post_status\' => $status,
);
$the_query = new WP_Query($args);  
之前我犯的错误是,在保存帖子时,我将多个课程名称存储为数字数组本身,这导致MySql引擎存储难以搜索的数组可序列化字符串。但现在我将多个课程名称保存为一个字符串,用逗号分隔,如下所示:123456789

相关推荐

Search results for ACF data

是否可以编写查询以仅从一个自定义字段中搜索数据?我有一个名为“讲座”的CPT,我只想搜索名为“关键字”的自定义字段中的数据,我有:<?php $args = array( \'post_type\' => \'lectures\', \'order\' => \'ASC\', \'posts_per_page\' => -1, \'