在 WooCommerce 中显示库存数量为正的产品
Show products with a positive stock quantity in WooCommerce
我正在使用具有主动管理库存的简单和变体产品。
我只需要在前端搜索和类别中列出库存数量 > 0 的产品。
我正在尝试以下代码,但不起作用。
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);
}
};
您的问题是由于 'key' => '_stock_quantity',
而应该是 'key' => '_stock',
…
现在您可以使用专用的 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;
};
或者您的代码:
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);
}
};
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。
我正在使用此代码段并成功运行:
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');
我正在使用具有主动管理库存的简单和变体产品。
我只需要在前端搜索和类别中列出库存数量 > 0 的产品。
我正在尝试以下代码,但不起作用。
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);
}
};
您的问题是由于 'key' => '_stock_quantity',
而应该是 'key' => '_stock',
…
现在您可以使用专用的 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;
};
或者您的代码:
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);
}
};
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。
我正在使用此代码段并成功运行:
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');