【发布时间】:2021-11-28 13:09:58
【问题描述】:
我的客户销售单一数量的产品。她的网站有一个专门的页面,用于在产品售出(缺货)后展示这些产品。我的挑战是从所有其他页面隐藏缺货产品。到目前为止,我已经添加了许多过滤器。我现在想要完成的是在类别页面上隐藏缺货产品。有过滤器吗?
以下是当前使用的过滤器:
/**
* @snippet Display Out of Stock Products via Shortcode - WooCommerce
* @how-to Get CustomizeWoo.com FREE
* @author Rodolfo Melogli
* @compatible WooCommerce 5
* @donate $9 https://businessbloomer.com/bloomer-armada/
*/
add_shortcode( 'out_of_stock_products', 'bbloomer_out_of_stock_products_shortcode' );
function bbloomer_out_of_stock_products_shortcode() {
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'outofstock',
)
),
'fields' => 'ids',
);
$product_ids = get_posts( $args );
$product_ids = implode( ",", $product_ids );
return do_shortcode("[products ids='$product_ids']");
}
add_filter( 'woocommerce_product_query_meta_query', 'shop_only_instock_products', 10, 2 );
function shop_only_instock_products( $meta_query, $query ) {
// Only on shop archive pages
if( is_admin() || is_search() || ! is_shop() ) return $meta_query;
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
);
return $meta_query;
}
/**
* Hide loop read more buttons for out of stock items
*/
if (!function_exists('woocommerce_template_loop_add_to_cart')) {
function woocommerce_template_loop_add_to_cart() {
global $product;
if ( ! $product->is_in_stock() || ! $product->is_purchasable() ) return;
wc_get_template('loop/add-to-cart.php');
}
}
/* Hide out of stock products in related section */
add_filter( 'woocommerce_related_products', 'mysite_filter_related_products', 10, 1 );
function mysite_filter_related_products( $related_product_ids )
{
if (!is_admin()) {
foreach ($related_product_ids as $key => $value) {
$relatedProduct = wc_get_product($value);
if (!$relatedProduct->is_in_stock() ) {
unset($related_product_ids["$key"]);
}
}
return $related_product_ids;
}
}
【问题讨论】:
标签: php wordpress woocommerce filter