【问题标题】:Hide "out of stock" products with custom meta data In Woocommerce在 Woocommerce 中使用自定义元数据隐藏“缺货”产品
【发布时间】:2018-03-12 02:14:50
【问题描述】:

我目前正在开发一个 WooCommerce 网店,并且我添加了一个名为 external_stock 的自定义元字段,其中 WP All Import 每 3 小时导入我们供应商处为我们所有产品提供的库存。我们在实际商店中获得的产品数量正在正常库存字段中输入。

我想要实现的是,正常库存和external_stock 均为 0 的产品不会显示在网上商店中。

我已经编辑了一个插件,当我们的库存为 0 但外部库存大于 0 时,产品页面会显示“x 天内可用”,当两个库存都为 0 时,它将显示“缺货” ,但客户仍然可以订购“缺货”产品,这就是我想隐藏它们的原因。

【问题讨论】:

    标签: php wordpress woocommerce product stock


    【解决方案1】:

    Woocommerce 3 更新

    自 Woocommerce 3 以来,产品 库存状态 不再设置为产品元数据。

    现在product_visibility自定义分类outofstock术语下处理。

    因此,您需要使用税务查询来隐藏缺货产品:

    add_action( 'woocommerce_product_query', 'action_product_query', 10, 2 );
    function action_product_query( $q, $query ) {
        // Get any existing Tax query
        $tax_query = $q->get( 'tax_query');
        
        // Define an additional tax query 
        $tax_query = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'slug',
            'terms'   => array('outofstock'),
            'compare' => 'NOT IN',
        );
        
        // Set the new merged tax query
        $q->set( 'tax_query', $tax_query );
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    您可以在 if 语句中使用任何 WooCommerce conditional tag 来定位特定产品类别或产品标签存档页面。


    对于包含特定元数据的产品,您将使用:

    add_action( 'woocommerce_product_query', 'action_product_query', 10, 2 );
    function action_product_query( $q, $query ) {
        // Get any existing Tax query
        $tax_query = $q->get( 'tax_query');
        
        // Get any existing meta query
        $meta_query = $q->get( 'meta_query');
        
        // Define an additional tax query 
        $tax_query = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'slug',
            'terms'   => array('outofstock'),
            'compare' => 'NOT IN',
        );
        
        // Define an additional meta query 
        $meta_query = array(
            'key'     => 'external_stock',
            'value'   => '0', //  <===  Set here your desired value (if needed)
            'compare' => '>', //  <===  Set Here the correct compare argument (if needed)
        );
        
        // Set the new merged tax query
        $q->set( 'tax_query', $tax_query );
        
        // Set the new merged meta query
        $q->set( 'meta_query', $meta_query );
    }
    

    原答案:

    您可以尝试在 woocommerce_product_query 操作挂钩中挂钩的自定义函数:

    add_action( 'woocommerce_product_query', 'action_product_query', 10, 2 );
    function action_product_query( $q, $query ) {
        // Get any existing meta query
        $meta_query = $q->get( 'meta_query');
        
        // Define an additional meta query 
        $q->set( 'meta_query', array( array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => 'NOT LIKE',
        ) ) );
        
        // Set the new merged meta query
        $q->set( 'meta_query', $meta_query );
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    代码已经过测试并且可以工作。

    它将从商店和档案页面中删除所有“缺货”产品。 但它不会隐藏可变产品的单个产品页面中的“缺货”变体。

    对于您的自定义 meta_key external_stock,您必须以这种方式添加它:

    add_action( 'woocommerce_product_query', 'action_product_query', 10, 2 );
    function action_product_query( $q, $query ) {
        // Get any existing meta query
        $meta_query = $q->get( 'meta_query');
        
        $meta_query = array( 
            'relation' => 'AND', // can be also 'OR'
            array(
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => 'NOT LIKE',
            ),
            array(
                'key'     => 'external_stock',
                'value'   => '0', //  <===  Set here your desired value (if needed)
                'compare' => '>', //  <===  Set Here the correct compare argument (if needed)
        ) );
        
        // Set the new merged meta query
        $q->set( 'meta_query', $meta_query );
    }
    

    这是未经测试的,需要你自己设置和测试


    官方文档:WordPress Class Reference WP_Query - Custom Field Parameters

    【讨论】:

    • 谢谢!我必须将 'compare' =&gt; '=&lt;' 更改为 'compare' =&gt; '&gt;' 才能真正让它按我想要的方式工作,但其余的工作正常。
    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多