如果您不想使用SQL,这是我制作搜索页面的方法。
基本问题:在进行meta_query时,WordPress认为我希望条件与“AND”而不是“OR”连接。
因此,WordPress会查找标题/内容=“myContent”和aioseop_keyword =“myContent”的页面。这(在我的情况下)导致零结果,尽管有匹配SEO关键字的页面。
为了解决这个问题,我进行了两个查询。听起来很简单,但是:尽管$post对象中有帖子,但循环不想识别帖子。我在查看
the have_posts() function后找到了这个解决方案:它引用除$post对象之外的其他变量。
$term = get_search_query(); // same as $_GET['s']
$wordpress_keyword_search =& new WP_Query(array(
's' => $term,
'showposts' => -1
));
foreach ($wordpress_keyword_search->posts as $post_)
$exclusion[] = $post_->ID;
$aioseop_keyword_search =& new WP_Query(array(
'post__not_in' => $exclusion,
'post_type' => 'any',
'showposts' => -1,
'meta_query' => array(
array(
'key' => '_aioseop_keywords',
'value' => $term,
'compare' => 'LIKE',
)
)
));
$wordpress_keyword_search->posts = array_merge($wordpress_keyword_search->posts, $aioseop_keyword_search->posts );
$wordpress_keyword_search->found_posts = $wordpress_keyword_search->found_posts + $aioseop_keyword_search->found_posts;
$wordpress_keyword_search->post_count = $wordpress_keyword_search->post_count + $aioseop_keyword_search->post_count;
然后在一个简单的循环中使用它:
if ($wordpress_keyword_search->have_posts()) {
while($wordpress_keyword_search->have_posts()) {
$wordpress_keyword_search->the_post();
# now you simply can:
the_title();
the_content();
}
} else {
echo '<p>Sorry, no posts found</p>';
}