使用GET_POST时,TAX_QUERY不能正常工作

时间:2015-04-09 作者:marcelo2605

以下是我的参数:

$args_home = array(
    \'post_type\' => array(\'news\', \'jobs\'),
    \'posts_per_page\' => 12,
    \'meta_query\' => array(
        array(
            \'key\' => \'_thumbnail_id\'
        )
    ),
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'categoria\',
            \'terms\' => array(4, 28),
            \'operator\' => \'NOT IN\'
        )
    )
);
使用wp\\u query,我得到了预期的结果。但当我尝试使用get\\u posts时,结果是不同的。这个operator 不工作。

1 个回复
SO网友:Pieter Goosen

这很奇怪,默认情况下不应该发生。get_posts 使用WP_Query. 如果您查看get_posts, 传递给的所有参数get_posts 未更改地传递给WP_Query 除了以下参数category 已更改为cat, 这个includeexclude 参数,以包括或排除更改为的某些帖子post__inpost__not_in 分别和numberposts 已更改为posts_per_page.

1839    function get_posts( $args = null ) {
1840            $defaults = array(
1841                    \'numberposts\' => 5, \'offset\' => 0,
1842                    \'category\' => 0, \'orderby\' => \'date\',
1843                    \'order\' => \'DESC\', \'include\' => array(),
1844                    \'exclude\' => array(), \'meta_key\' => \'\',
1845                    \'meta_value\' =>\'\', \'post_type\' => \'post\',
1846                    \'suppress_filters\' => true
1847            );
1848    
1849            $r = wp_parse_args( $args, $defaults );
1850            if ( empty( $r[\'post_status\'] ) )
1851                    $r[\'post_status\'] = ( \'attachment\' == $r[\'post_type\'] ) ? \'inherit\' : \'publish\';
1852            if ( ! empty($r[\'numberposts\']) && empty($r[\'posts_per_page\']) )
1853                    $r[\'posts_per_page\'] = $r[\'numberposts\'];
1854            if ( ! empty($r[\'category\']) )
1855                    $r[\'cat\'] = $r[\'category\'];
1856            if ( ! empty($r[\'include\']) ) {
1857                    $incposts = wp_parse_id_list( $r[\'include\'] );
1858                    $r[\'posts_per_page\'] = count($incposts);  // only the number of posts included
1859                    $r[\'post__in\'] = $incposts;
1860            } elseif ( ! empty($r[\'exclude\']) )
1861                    $r[\'post__not_in\'] = wp_parse_id_list( $r[\'exclude\'] );
1862    
1863            $r[\'ignore_sticky_posts\'] = true;
1864            $r[\'no_found_rows\'] = true;
1865    
1866            $get_posts = new WP_Query;
1867            return $get_posts->query($r);
1868    
1869    }
唯一值得注意的区别是以下两行

1846     \'suppress_filters\' => true 
1864     $r[\'no_found_rows\'] = true;
其中1846行是最重要的。默认情况下,get_posts 不会被任何作用于WP_Query 因为这在第1846行中是静音的。WP_Query 默认情况下,由其上使用的任何外部过滤器更改,这适用于主查询和使用WP_Query. 这就是为什么使用诸如is_main_query() 专门针对主查询。

同样非常重要的是要知道,任何写得不好、没有重置的查询都可能并且会干扰这两者WP_Queryget_posts 也就是他们的输出。query_posts 也会破坏页面上的许多功能

要对此进行调试,您需要查找作用于WP_Query 或主查询,也可以查找pre_get_posts. 查找任何自定义查询,并确保WP_Query 已用重置wp_reset_postdata(). 如果您使用过setup_postdata( $post ) 具有get_posts, 然后你也需要重置它。删除对的任何使用query_posts.

如果这不起作用,请切换到默认主题并再次测试。别忘了先清除浏览器和插件缓存。最后,逐个停用每个插件,然后进行测试。如果与插件相关,这将显示导致此问题的插件

结束

相关推荐

SSL/HTTPS Redirect Loop

我似乎无法确保某些页面的安全,我想我已经尽了一切可能。。htaccess重定向iTheme安全插件将站点url更改为HTTPS://li>由于某种原因,这两个插件都不能强制SSL。它只是进入一个重定向循环。与更改类似。htaccess。然而,wooCommerce页面是安全的,我还可以通过HTTPS访问wordpress目录根中的页面,以及上传的内容。我应该从哪里开始查找,或者如何开始调试重定向循环?Wordpress是3.8.5版,主题为“BigBang 1.7.3”。插件列表:Advanced