简体   繁体   English

在 WooCommerce 中显示具有正库存数量的产品

[英]Show products with a positive stock quantity in WooCommerce

I am using simple and variations products with active manage stock.我正在使用具有主动管理库存的简单和变体产品。

I need to list only products with stock quantity > 0 in frontend search and categories.我只需要在前端搜索和类别中列出库存数量 > 0 的产品。

I am trying the follow code, but does not work.我正在尝试以下代码,但不起作用。

add_action( 'pre_get_posts', 'show_only_products_with_qtdy_min_1' );

function show_only_products_with_qtdy_min_1( $query ) {

    // $query->is_search

    if( ! is_admin() && $query->is_main_query() && $query->query_vars['post_type'] == 'product' ) {
        //Get original meta query
        $meta_query = $query->get('meta_query');

        // Add your criteria
        $meta_query[] = array(
                'key'     => '_stock_quantity',
                'value'   => 0,
                'compare' => '>'
        );    
        // print_r($meta_query); exit();
        // Set the meta query to the complete, altered query
        $query->set('meta_query',$meta_query);
    }
};

Your issue is due to 'key' => '_stock_quantity', that should be instead 'key' => '_stock', 您的问题是由于'key' => '_stock_quantity',而应该是'key' => '_stock',

Now you can use the dedicated Woocommerce filter: 现在,您可以使用专用的Woocommerce过滤器:

add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_qtdy_min_1', 10, 2 );
function show_only_products_with_qtdy_min_1( $meta_query, $query ) {
    if( is_admin() ) return $meta_query;

    // Add your criteria
    $meta_query[] = array(
        'key'     => '_stock',
        'type'    => 'numeric',
        'value'   => 0,
        'compare' => '>'
    );
    return $meta_query;
};

Or your code: 或您的代码:

add_action( 'pre_get_posts', 'show_only_products_with_qtdy_min_1' );
function show_only_products_with_qtdy_min_1( $query ) {

    // $query->is_search

    if( ! is_admin() && $query->is_main_query() && $query->query_vars['post_type'] == 'product' ) {

        $meta_query = $query->get('meta_query'); // Get original meta query

        // Additional meta query
        $meta_query[] = array(
                'key'     => '_stock',
                'type'    => 'numeric',
                'value'   => 0,
                'compare' => '>'
        );

        // Set back the altered meta query
        $query->set('meta_query',$meta_query);
    }
};

Code goes in function.php file of your active child theme (or theme) or also in any plugin file. 代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。

Tested and works. 经过测试和工作。

I'm using this code snippet and worked: 我正在使用此代码段并工作:

function hide_out_of_stock_products( $q ) {
    if ( ! $q->is_main_query() || is_admin() ) {
        return;
    }

    if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {
        $tax_query = (array) $q->get('tax_query');

        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field' => 'term_taxonomy_id',
            'terms' => array( $outofstock_term->term_taxonomy_id ),
            'operator' => 'NOT IN'
        );

        $q->set( 'tax_query', $tax_query );

    }

    remove_action( 'pre_get_posts', 'hide_out_of_stock_products' );
}
add_action('pre_get_posts', 'hide_out_of_stock_products');

安装FileZilla,然后连接到WooCommerce的站点服务器查找文件,更改所需代码,使程序更好,单击“保存刷新站点”,然后WooCommerce将成为您想要的程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM