0

我正在编写一个 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' => '!='
        )
    )
)));
4

1 回答 1

0

您搜索_wp_page_templatePosts 不会有任何_wp_page_template.
所以它只会获取页面。因为它只会返回有_wp_page_template集合的帖子/页面。所以你需要检查一个不存在的元键。

在 WP 3.5 中,将添加比较值“不存在”。

在 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;

第二种选择是获取所有具有模板的帖子
从此查询中获取所有 ID。
然后执行一个新的 wp_query,在其中排除先前获取的查询的 ID。

最佳选择
这些变通办法对性能不利。
最好的选择是等待几周等待 WP 3.5,它应该在 12 月的某个地方发布。

于 2012-11-20T10:03:27.963 回答