首页 > 解决方案 > 在 pre_get_posts 中更改查询后修复 found_posts - WordPress

问题描述

我正在使用与以下类似的功能,以便在类别/搜索结果页面上隐藏属于特定类别的缺货产品。像这样:

function hide_out_of_stock_parts_from_cat( $q ) {

    if ( ! $q->is_main_query() || is_admin() ) {
        return;
    }
    if (is_product_category(1111) || is_search()){
        if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {

            $tax_query = (array) $q->get('tax_query');

            $tax_query[] = array(
                array(
                    'taxonomy' => 'product_visibility',
                    'field' => 'term_taxonomy_id',
                    'terms' => array( $outofstock_term->term_taxonomy_id ),
                    'operator' => 'NOT IN'
                ),
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    'terms' => array( 'my-category-slug' ), 
                    'operator' => 'NOT IN'
                ),
            );

            $q->set( 'tax_query', $tax_query );

        }

        remove_action( 'pre_get_posts', 'hide_out_of_stock_parts_from_cat' );
    }

}
add_action( 'pre_get_posts', 'hide_out_of_stock_parts_from_cat' );

这成功地从类别页面和搜索结果中删除了属于“my-category-slug”的缺货产品。但是,显示的产品数量是错误的。

ie) 如果该类别有 5 个产品,但有两个缺货,则只会显示三个产品。但是,找到的产品消息会显示“显示所有 5 个找到的产品”而不是 3 个。

我知道这与“found_posts”有关,但我不确定如何更改它。

标签: phpwordpresssearchposts

解决方案


推荐阅读