我使用编写了一个搜索查询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)。
但是我的查询没有按预期工作,有人能告诉我代码中有什么错误吗?
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