我正在尝试为我的wordpress构建一个更好的脚本,通过分割帖子的标题并搜索标题的每个单词的帖子来显示相关的帖子。
但是当我将WP_QUERY的's'arg的值作为一个单词数组传递时。它失败并显示wordpress的所有帖子
我被卡住了。传递多个'值'的任何解决方案。提前致谢..
$search = $_GET['search'];
$search_terms = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $search, -1, PREG_SPLIT_NO_EMPTY);
$p_args = array(
"post_type" => "post",
"paged" => $paged,
"s" => $search_terms,
);
query_posts($p_args);
WP_Query接受一串用“+”字符连接的单个关键字。
$p_args = array(
"post_type" => "post",
"paged" => $paged,
"s" => "dogs+cats",
);
首先,我认为你应该使用WP_Query而不是query_posts。在他们的documentation上查询_posts,它提到:
注意:此函数不适用于插件或主题。如后面所述,有更好的,更高性能的选项来改变主查询。
假设您切换到WP_Query,搜索参数或's'值似乎不接受数组。根据documentation,你只能使用一个字符串。
向此添加数组将导致WP_Query忽略该数组。
我最近在一个项目上采用的方法是:
// Your sample query
$query = new WP_Query( array( 'cat' => 4 ) );
// Print the SQL query
echo $query->request;
应该是这样的
global $wpdb;
global $post;
$querystr = "
SELECT DISTINCT wposts.*
FROM $wpdb->posts wposts
LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE wpostmeta.meta_key = 'customDateField'
AND wpostmeta.meta_value >= CURDATE()
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(1,2)
ORDER BY wpostmeta.meta_value ASC
LIMIT 4
";
$wpdb->get_results($querystr, OBJECT);
您应该注意,传递给自定义查询的数据需要手动清理。
尽管这对我有用,但我不确定它是否是最好的方法。