隐藏WooCommerce目录中具有特定库存状态的所有产品

安东尼奥

我在Wordpress和Woocommerce网站上使用Flatsome模板。我还创建自定义库存状态(例如noproduzione,当不再从制造商创建产品时使用)。但是我不想noproduzione在我的网站上显示此产品(库存状态)(仅在管理页面中)。

我正在使用我在此处编写的代码(将其放在我的functions.php文件中),但似乎在Flatsome上不起作用。如何将其应用于此模板?

add_action( 'woocommerce_product_query', 'qc_action_product_query', 10, 2 );
function qc_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'   => 'noproduzione',
        'compare' => 'NOT LIKE',
    ) ) );
    
    // Set the new merged meta query
    $q->set( 'meta_query', $meta_query );
}

为了创建自定义代码,我使用了StackOverflow上的一些代码

// Add new stock status options
add_filter( 'woocommerce_product_stock_status_options', 'filter_woocommerce_product_stock_status_options', 10, 1 );
function filter_woocommerce_product_stock_status_options( $status ) {
    // Add new statuses
    $status['10days'] = __( 'Disponibile entro 10 giorni', 'woocommerce' );
    $status['inarrivo'] = __( 'In arrivo', 'woocommerce' );
    $status['noproduzione'] = __( 'Fuori produzione', 'woocommerce' );

    return $status;
}
                  
// Availability text
add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 );
function filter_woocommerce_get_availability_text( $availability, $product) {
    switch( $product->get_stock_status() ) {
        case '10days':
            $availability = __( 'Disponibile entro 10 giorni', 'woocommerce' );
        break;
        case 'inarrivo':
            $availability = __( 'In arrivo', 'woocommerce' ); 
        break;
    case 'noproduzione': 
    $availability = __( 'Fuori produzione', 'woocommerce' );  
    
        break;
    }
    return $availability;  
}

我添加了代码以显示可用性文本,并在产品为noproduzione库存状态时隐藏购物车按钮

// Display the stock status on other page
add_action( 'woocommerce_after_shop_loop_item_title', 'wcs_stock_text_shop_page', 25 );
function wcs_stock_text_shop_page() {
    //returns an array with 2 items availability and class for CSS
    global $product;

    $availability = $product->get_stock_status();
    //check if availability in the array = string 'noproduzione'
    //if so display on page.//if you want to display the 'in stock' messages as well just leave out this, == 'Out of stock'
    if ( $product->get_stock_status() === 'noproduzione') {
        echo '<span style="color:#b20000;">Fuori produzione!</span>';
    }
    else if ( $product->get_stock_status() === 'onbackorder') {
        echo '<span style="color:#13b200;">Disponibile su ordinazione</span>';
    }
    else if ( $product->get_stock_status() === '10days') {
        echo '<span style="color:#13b200;">Disponibile in 10 giorni</span>';
    }
    else if ( $product->get_stock_status() === 'inarrivo') {
        echo '<span style="color:#e0c81d;">In arrivo</span>';
    }
    else if ( $product->get_stock_status() === 'outofstock') {
        echo '<span style="color:#b20000;">Terminato!</span>';
    }
    else {
        echo '<span style="color:#53af00;">Disponibile!</span>';
    }
}

// Hide the cart button if stock status is 'noproduzione'
add_filter('woocommerce_is_purchasable', 'filter_is_purchasable_callback', 10, 2 );
add_filter('woocommerce_variation_is_purchasable', 'filter_is_purchasable_callback', 10, 2 );
function filter_is_purchasable_callback( $purchasable, $product ) {
    if ( $product->get_stock_status() === 'noproduzione' ) { 
        return false;
    }
    return $purchasable;
}

最后,我还添加了此代码,这很有用,因为按“库存”状态订购“相关产品”,对我来说是好的,因为不显示其他自定义库存状态。但是我想将此应用到我的所有前端站点。

//show, in the related products, only instock products!
add_filter( 'woocommerce_related_products', 'filter_woocommerce_related_products', 10, 3 );
function filter_woocommerce_related_products( $related_posts, $product_id, $args ) {    
    foreach( $related_posts as $key => $related_post ) {        
        // Get product
        $related_product = wc_get_product( $related_post );
        
        // Is a WC product 
        if ( is_a( $related_product, 'WC_Product' ) ) {
            // Stock status
            $stock_status = $related_product->get_stock_status();
            
            // NOT instock
            if ( $stock_status != 'instock' ) {
                unset( $related_posts[$key] );
            }
        }
    }
    
    return $related_posts;
}

因此,问题是:如何在我的网站上隐藏此产品(Noproduzione库存状态)(并仅在管理页面中显示)?Noproduzione与OUTOFSTOCK不同!

LoicTheAztec

您最好woocommerce_product_query_meta_query按照以下方式使用专用的过滤器挂钩,以从商店中隐藏所有具有特定库存状态(适用于自定义库存状态)的产品

add_action( 'woocommerce_product_query_meta_query', 'custom_product_query_meta_query', 1000 );
function custom_product_query_meta_query( $meta_query ) {
    if ( ! is_admin() ) {
        $meta_query[] = array(
            'key'     => '_stock_status',
            'value'   => 'noproduzione',
            'compare' => '!=',
        );
    }
    return $meta_query;
}

代码进入活动子主题(或活动主题)的functions.php文件中。自WooCommerce 3起测试并适用于所有版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Woocommerce 存档页面中显示所有产品类型的库存可用性

来自分类Dev

从所有产品中获取 Woocommerce 中特定产品属性的术语名称数组

来自分类Dev

如何检索库存中的所有产品,以及SQL可用的任何产品?

来自分类Dev

woocommerce所有产品尺寸的列表

来自分类Dev

如果未登录,WooCommerce 会隐藏某个类别的所有产品

来自分类Dev

如何使用代码模板中的特定标签过滤woocommerce网店中的所有产品?

来自分类Dev

如何从当前的WooCommerce产品类别中获取所有产品?

来自分类Dev

在 Woocommerce 中,如何查找某个产品是交叉销售的所有产品?

来自分类Dev

WooCommerce:返回特定类别中所有产品ID的函数

来自分类Dev

在页面上显示 Woocommerce 中低于特定价格的所有产品

来自分类Dev

Wordpress Woocommerce更改所有产品为缺货

来自分类Dev

WooCommerce我的帐户-下载:列出所有产品

来自分类Dev

通过WooCommerce按类别显示所有产品

来自分类Dev

获取woocommerce类别的所有产品ID

来自分类Dev

SQL查询从woocommerce中选择所有产品

来自分类Dev

从WooCommerce管理中的所有产品中删除销售价格

来自分类Dev

从WooCommerce管理中的所有产品中删除销售价格

来自分类常见问题

从具有特定元数据的类别中获取所有WooCommerce产品

来自分类Dev

如何在 angular 4 中实现 woocommerce api 以列出所有产品

来自分类Dev

Shopify-如何选择特定集合中的所有产品?

来自分类Dev

WooCommerce从购物车中删除所有产品,并将当前产品添加到购物车

来自分类Dev

WooCommerce从购物车中删除所有产品,并将当前产品添加到购物车

来自分类Dev

对Magento中的所有产品享受折扣

来自分类Dev

从表中获取所有产品并对其进行迭代

来自分类Dev

我可以搜索搜索中的所有产品吗?

来自分类Dev

在magento主页中显示所有产品

来自分类Dev

如何从所有产品中仅删除组价?

来自分类Dev

显示Magento 2中的所有产品

来自分类Dev

在1行SQL Server中列出所有产品

Related 相关文章

  1. 1

    在 Woocommerce 存档页面中显示所有产品类型的库存可用性

  2. 2

    从所有产品中获取 Woocommerce 中特定产品属性的术语名称数组

  3. 3

    如何检索库存中的所有产品,以及SQL可用的任何产品?

  4. 4

    woocommerce所有产品尺寸的列表

  5. 5

    如果未登录,WooCommerce 会隐藏某个类别的所有产品

  6. 6

    如何使用代码模板中的特定标签过滤woocommerce网店中的所有产品?

  7. 7

    如何从当前的WooCommerce产品类别中获取所有产品?

  8. 8

    在 Woocommerce 中,如何查找某个产品是交叉销售的所有产品?

  9. 9

    WooCommerce:返回特定类别中所有产品ID的函数

  10. 10

    在页面上显示 Woocommerce 中低于特定价格的所有产品

  11. 11

    Wordpress Woocommerce更改所有产品为缺货

  12. 12

    WooCommerce我的帐户-下载:列出所有产品

  13. 13

    通过WooCommerce按类别显示所有产品

  14. 14

    获取woocommerce类别的所有产品ID

  15. 15

    SQL查询从woocommerce中选择所有产品

  16. 16

    从WooCommerce管理中的所有产品中删除销售价格

  17. 17

    从WooCommerce管理中的所有产品中删除销售价格

  18. 18

    从具有特定元数据的类别中获取所有WooCommerce产品

  19. 19

    如何在 angular 4 中实现 woocommerce api 以列出所有产品

  20. 20

    Shopify-如何选择特定集合中的所有产品?

  21. 21

    WooCommerce从购物车中删除所有产品,并将当前产品添加到购物车

  22. 22

    WooCommerce从购物车中删除所有产品,并将当前产品添加到购物车

  23. 23

    对Magento中的所有产品享受折扣

  24. 24

    从表中获取所有产品并对其进行迭代

  25. 25

    我可以搜索搜索中的所有产品吗?

  26. 26

    在magento主页中显示所有产品

  27. 27

    如何从所有产品中仅删除组价?

  28. 28

    显示Magento 2中的所有产品

  29. 29

    在1行SQL Server中列出所有产品

热门标签

归档