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

Php 隐藏“;“缺货”;WooCommerce主页上的产品,php,wordpress,woocommerce,product,hook-woocommerce,Php,Wordpress,Woocommerce,Product,Hook Woocommerce,我不想在我的主页上显示“缺货”的产品。 我尝试了一些钩子和过滤器来改变产品查询,但它不起作用。 我还将“隐藏缺货”检查到了woocommerce设置区域 但产品仍在出现。我能知道发生了什么事吗 我尝试使用此筛选器挂钩来更改主产品查询: add_action( 'pre_get_posts', 'custom_pre_get_posts_query' ); function custom_pre_get_posts_query( $q ) { if ( ! $q->is_main_que

我不想在我的主页上显示“缺货”的产品。 我尝试了一些钩子和过滤器来改变产品查询,但它不起作用。 我还将“隐藏缺货”检查到了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' );

}

我想把缺货的产品藏起来,但什么都没用。非常感谢您的帮助。

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

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) 元查询使用专用的
woocommerce\u product\u Query\u元查询
过滤器挂钩:

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;
}
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;
}
2) 税务查询使用专用的
woocmerce\u product\u Query\u Tax\u 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;
}
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文件。两者都有效



相关:更新

检查当前主题文件夹中的
font-page.php
文件,可能您的开发人员在模板文件中添加了自定义代码,而没有调用任何钩子操作

旧答案

为什么不使用WooCommerce设置

  • 去商业区→ 设置并单击“产品”选项卡
  • 单击顶部的库存链接
  • 选中“从目录中隐藏缺货项目”选项以隐藏缺货项目

  • 因为它只适用于主页(如标题所示),如果你阅读了问题,那么OP已经尝试了你的建议。它在“VisualComposer”Woocommerce小部件上也非常有效。