隐藏WooCommerce主页上的“缺货”产品

时间:2019-05-09 18:52:04

标签: php wordpress woocommerce product hook-woocommerce

我不想在我的主页上显示“缺货”产品。 我已经尝试了一些WooCommerce挂钩和过滤器来更改产品查询,但是它不起作用。 我还检查了“隐藏缺货”进入woocommerce设置区域。

但是产品仍然出现。发生时,我能得到线索吗?

我尝试使用此过滤器挂钩来更改主要产品查询:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {


$q->set( 'meta_query', array(array(
    'key'       => '_stock_status',
    'value'     => 'outofstock',
    'compare'   => 'NOT IN'
)));

}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

我想隐藏缺货的产品,但是没有任何效果。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

您正在使用旧的WooCommerce版本的代码。尝试这种方法。

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() || is_admin() || ! $q->is_front_page() ) {
        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 );

    }
}

答案 1 :(得分:0)

要从首页中排除“缺货”产品,可以用不同的方法完成。

1)使用专用的woocommerce_product_query_meta_query过滤器挂钩的元查询

add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $meta_query[] = array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => '!=',
        );
    }
    return $meta_query;
}

2)使用专用的woocommerce_product_query_tax_query过滤器挂钩进行税收查询

add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
    // On woocommerce home page only
    if( is_front_page() ){
        // Exclude products "out of stock"
        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => array('outofstock'),
            'operator' => 'NOT IN'
        );
    }
    return $tax_query;
}

代码进入活动子主题(或活动主题)的functions.php文件中。两者都可以。


相关:Hide out of stock products only on shop archive pages in Woocommerce

答案 2 :(得分:0)

更新

检查当前主题文件夹中的font-page.php文件,也许您的开发人员已将自定义代码添加到模板文件中,而没有调用任何挂接操作。

旧答案

为什么不使用WooCommerce设置?

  1. 转到Woocommerce→设置,然后单击“产品”标签
  2. 点击顶部的“广告资源”链接
  3. 选中隐藏目录中的缺货商品选项以隐藏缺货商品