【问题标题】:Hide 'out of stock' products in Woocommerce在 Woocommerce 中隐藏“缺货”产品
【发布时间】:2014-08-20 06:50:16
【问题描述】:

在“产品”和“库存”下,我检查了以下设置: "从目录中隐藏缺货商品"

现在所有售罄的产品都隐藏在存档/类别视图中。到目前为止一切顺利。

问题是隐藏(缺货)产品是按页计算的。因此,如果首页上有 3 件商品已售罄,则仅显示库存商品 (6)。

这些“隐藏”的产品似乎仍然是可搜索的,并且通过不同的小部件可见。

任何想法如何解决这个问题?我的意思是真正隐藏缺货的产品。还是我需要手动删除它们?

【问题讨论】:

  • @super9 我已经用我第一次设置并将产品导入 WooCommerce 时忽略的内容更新了我的答案。不是真正的编程解决方案,但在导入时很容易被忽略。

标签: wordpress plugins woocommerce


【解决方案1】:

您可以尝试将其添加到主题的 functions.php 文件中:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {


$q->set( 'meta_query', array(array(
    'key'       => '_stock_status',
    'value'     => 'outofstock',
    'compare'   => 'NOT IN'
)));

}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

我从这个网址修改了代码:http://www.wptaskforce.com/how-to-exclude-one-or-more-category-in-woocommerce-shop-page/

再次保存在这里,以防网站离线:(此代码不包括某些产品类别)

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {

$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'PUT YOUR CATEGORY HERE' ), // Don't display products in the membership category on the shop page . For multiple category , separate it with comma.
'operator' => 'NOT IN'
)));

}



remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

【讨论】:

  • 感谢您的回复,但很遗憾没有奏效。缺货产品仍然可以搜索,并计入分页。由于开发人员没有将此添加到插件中,我想不幸的是没有任何快速修复此问题。
  • 很棒的解决方案,四年后仍然有效。需要考虑的几件事:(1)不检查查询/帖子类型的类型,因此将适用于自定义帖子类型。 (2) 覆盖任何已应用的 meta_query。当然,两者都很容易修复并取决于您自己的情况!
【解决方案2】:

自我注意:始终阅读开发人员的变更日志。

在这里找到答案:http://develop.woothemes.com/woocommerce/2014/02/solving-common-issues-after-updating-to-woocommerce-2-1/#category-counts-incorrect

如果类别的产品数量显示过高或 数量太少,更新到 WooCommerce 2.1 后有一个简单的 解决方法。

转到 WooCommerce 中的“工具”选项卡 > 您的系统状态 WordPress 管理面板。在这里,您首先使用“重新计算条款” 按钮,然后使用“清除瞬变”按钮。这会 强制系统在下次某个类别时重新计算所有产品 已加载。

更新:另外请记住,将库存数量更改为 0 是不够的。您还必须将“库存状态”设置为“缺货”。如果没有,该产品将被计入商店,即使没有库存产品。

【讨论】:

    【解决方案3】:

    仅当您使用官方 woocommerce 简码时才有效,但如果您使用可视化作曲家创建页面并使用自定义插件或 3rd 方插件或简码,则第一步是从循环中运行的查询然后你把它修改成这样

    $params = array(
            'posts_per_page' => 5,
            'post_type' => array('product', 'product_variation'),
            'meta_query' => array(
                array(
                    'key' => '_stock_status',
                    'value' => 'instock'
                )
            )
    );
    

    你必须确定的最重要的部分是

        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'instock'
            )
        )
    

    【讨论】:

      【解决方案4】:

      我找到了更简单的方法,如果有人仍在寻找在 woocommerce 中隐藏缺货产品,请按照这些简单的步骤操作,无需编辑 html!

      1. 转到 WooCommerce -> 设置
      2. 进入库存
      3. 有一个复选框说明了我们的问题,但它是英文的 :-) 你会找到你需要的
      4. 保存

      【讨论】:

      • Klaudia... 抱歉,该选择只会隐藏存档(目录)中的产品。搜索将返回存档中未显示的缺货项目,即使设置确定了隐藏缺货项目的偏好。
      • 为我工作。谢谢!
      【解决方案5】:

      隐藏缺货产品的步骤

      1. 转到 WordPress 仪表板中的 WooCommerce -> 设置子菜单
      2. 点击产品标签>库存子标签
      3. 选中选项Out Of Stock Visibility 隐藏缺货产品

      【讨论】:

        【解决方案6】:

        您可以将 PHP sn-p 放在您的子主题 functions.php 文件的底部。

        add_action('woocommerce_product_query', 'custom_woocommerce_product_query');
        
        function custom_woocommerce_product_query($q)
            {
                if (!is_admin())
                {
                    $oos_query = new WP_Query(['meta_query' => [['key' => '_stock_status', 'value' => 'outofstock', 'compare' => '=', ], ], 'post_type' => 'product', 'posts_per_page' => - 1, 'fields' => 'ids', ]);
                    $exclude_ids = $oos_query->posts;
            
                    $q->set('post__not_in', $exclude_ids);
                }
            }
        

        【讨论】:

        • 如果您解释并添加评论,您的答案会更有帮助
        • 在functions.php中添加了sn-p,但搜索结果中一直显示缺货产品
        【解决方案7】:

        我知道这个问题是很久以前提出的,但是问题的解决方案现在不同了,所以我将这个问题发布给与我有同样问题的人。在 WooCommerce 5.3.0 上测试

        解决方案: 首先确保 Woocomerce > 设置中的“隐藏缺货产品”复选框未选中,然后将此 PHP 代码添加到您的子主题 functions.php 文件中:

        add_action('woocommerce_product_query', 'show_only_instock_products');
        
        function show_only_instock_products($query) {
                $meta_query = $query->get( 'meta_query' );
                $meta_query[] = array(
                        'key'       => '_stock_status',
                        'compare'   => '=',
                        'value'     => 'instock'
                );
                $query->set( 'meta_query', $meta_query );
        }
        

        它在我的商店中运行良好,该商店与批发商集成在一起,库存水平每小时更新一次,并且有数千种产品。

        【讨论】:

        • 如何只为已注销的用户隐藏缺货产品?
        • @ZeroCode 你是指一般的注销用户吗?还是非管理员?
        猜你喜欢
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 2021-08-31
        相关资源
        最近更新 更多