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