WP_QUERY不使用POST_TYPE

时间:2017-11-18 作者:Liam Kernighan

我有两台机器:本地和部署。

在本地计算机上,我有以下代码:

$all_prods = array(
    \'posts_per_page\' => -1,
    \'post_type\'      => \'product\',
);

dump(query_posts($all_prods));
我得到的结果是我之前创建的三个产品。但部署计算机上的同一代码返回一个空数组,尽管该网站中有许多产品。

我认为部署计算机的post类型有另一个前缀,而不是我的本地前缀,但当我在部署计算机上键入时:

$prod = wc_get_product(440);
dump($prod);
我明白了WC_Simple_Product 具有字段的对象"post_type" 等于"product". 如何调试它?

2 个回复
最合适的回答,由SO网友:Liam Kernighan 整理而成

我找到了解决办法。

$query = new WP_Query();
$all_prods = array(
    \'posts_per_page\' => -1,
    \'post_type\'      => \'product\',
);
$query = new WP_Query($all_prods);
echo $query->request . \'<BR>\';
两台机器上的输出不同,一个多语言插件出现问题,该插件自动添加第二个表并与之进行内部连接。

SO网友:Drupalizeme

首先,我要指出,在大多数情况下query_posts 应该避免!

此函数将完全覆盖主查询,不供插件或主题使用。它修改主查询的过于简单的方法可能会有问题,应该尽可能避免。

我建议使用WP\\U查询转移您的查询,并尝试以下操作:

$all_prods = array(
    \'posts_per_page\' => -1,
    \'post_type\'      => \'product\',
);
$query = new WP_Query($all_prods);

while ($query->have_posts()) {
    $query->the_post();
    $post_id = get_the_ID();
    echo $post_id;
}
对于调试部分,我将使用get_post($post_id); 验证我们讨论的是相同的post\\u类型。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post