在pre_get_posts-WordPress

时间:2019-01-30 14:58:41

标签: php wordpress search posts

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

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”的缺货产品。但是,显示的产品数是错误的。

i.e)如果该类别有5种产品,但是有2种产品缺货,则只会显示3种产品。但是,找到的产品消息将显示“显示找到的所有5个产品”,而不是3。

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

0 个答案:

没有答案