我正在编写一个 Wordpress 查询来过滤搜索结果。
我想使用模板
logged_in_mentor_only_template.php
、logged_in_only_template.php
(以及两个受限类别)删除结果。
此查询有效,但会停止返回任何帖子。很奇怪,页面被返回,但帖子却没有。 (我还没有添加类别过滤,因为我没有要过滤的帖子!)
我尝试添加 post_type 过滤器,其中列出了帖子和页面,但仍然没有任何结果。
任何帮助表示赞赏。
query_posts(array_merge($wp_the_query->query, array(
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'logged_in_mentor_only_template.php',
'compare' => '!='
),
array(
'key' => '_wp_page_template',
'value' => 'logged_in_only_template.php',
'compare' => '!='
)
)
)));
您搜索
_wp_page_template
帖子不会有任何_wp_page_template
。_wp_page_template
的帖子/页面。
因此,您需要检查不存在的元密钥。
在 WP 3.5 中,将添加 compare 值“NOT EXISTS”。
在 3.5 之前,我建议采用以下解决方法。 不要添加这些元查询值。但在循环中检查它们:
while (the_posts()): the_post();
if (get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php' || get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php')
continue; // skipp the rest of this round
//Do the rest of your loop
endwhile;
第二个选择是获取所有do具有模板的帖子。
从此查询中获取所有 ID。
然后执行一个新的 wp_query,其中排除之前获取的查询的 ID。
最佳选择
这些变通办法不利于性能。
最好的选择是等待几周的 WP 3.5,它应该在 12 月的某个时候发布。