WooCommerce返回产品POST_STATUS为已发布,即使它处于状态草稿

时间:2020-12-14 作者:Husky110

你好,

我在获取Woocommerce产品WP\\U PostObject的post\\U状态时遇到问题。我得到所有执行此查询的产品:

$onlineShopProducts = get_posts([
            \'post_type\' => [\'product\', \'product_variation\'],
            \'orderby\' => \'post_title\',
            \'order\' => \'ASC\',
            \'numberposts\' => -1
        ]);
现在,我想在foreach循环期间过滤掉处于状态草稿中的所有产品:

foreach ($onlineShopProducts as $onlineShopProduct){
            if($onlineShopProduct->post_status != \'publish\'){
                continue;
            }
            doSomething($onlineShopProduct)
        }
但是$onlineShopProduct->;post\\U status和get\\U post\\U status($onlineShopProduct->;ID)都返回;“发布”;,即使它们已经设置好了;草稿“;在“产品编辑”视图中。。。(德语)

enter image description here

是否有某种post\\u meta我必须查询,或者这是某种已知的bug?我如何筛选出草拟的产品?

您好

1 个回复
SO网友:Tom J Nowell

解决方案很简单,请删除if 检查您的问题并添加post_status 参数到get_posts.

例如:

$args = [
    \'post_status\' => \'publish\',
];
$only_published_posts = get_posts( $args );
同样,我们可以传递我们想要的状态数组,例如。

$args = [
    \'post_status\' => [ \'publish\', \'pending\' ],
];
$only_published_and_pending_posts = get_posts( $args );
或除已发布帖子外的所有内容:

$args = [
    \'post_status\' => [ \'future\', \'draft\', \'pending\' ],
];
$not_published = get_posts( $args );
或私人职位:

$args = [
    \'post_status\' => [ \'private\' ],
];
$private_posts = get_posts( $args );
或所有post状态,包括修订和自动草稿:

$args = [
    \'post_status\' => \'any\',
];
$all_posts = get_posts( $args );

There are a limited number of post statuses that come with core, and they\'re hard coded, so you can just list the ones you want, and ommit the ones you don\'t.

更多信息,请访问:https://developer.wordpress.org/reference/classes/wp_query/#status-parameters

请注意,虽然这是规范的标准WordPress方法,但插件可能会使用自定义的post状态,如果构建得不好,则会完全忽略状态。在这些情况下,您需要联系他们的开发支持路线

相关推荐

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

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