Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不传递最低价格和最高价格URL的情况下激活价格过滤器_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 如何在不传递最低价格和最高价格URL的情况下激活价格过滤器

Php 如何在不传递最低价格和最高价格URL的情况下激活价格过滤器,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我更改了woocommerce的核心查询,并尝试基于自定义查询字符串pro_type_sws=32显示产品 现在,当我提供整个querystring时,它可以工作了 wp/?最低价格=35,最高价格=120,后期类型=产品和专业类型=32 但当我只是使用 localhost/wp/?post\u type=product&pro\u type\u sws=32 它不工作,我不知道如何在不使用小部件过滤器按钮的情况下激活pricefilter代码 简而言之,我想在产品页面上应用过滤器,这样它只显示

我更改了woocommerce的核心查询,并尝试基于自定义查询字符串pro_type_sws=32显示产品

现在,当我提供整个querystring时,它可以工作了

wp/?最低价格=35,最高价格=120,后期类型=产品和专业类型=32

但当我只是使用

localhost/wp/?post\u type=product&pro\u type\u sws=32

它不工作,我不知道如何在不使用小部件过滤器按钮的情况下激活pricefilter代码

简而言之,我想在产品页面上应用过滤器,这样它只显示那些与woocommerce的定制产品数据类型相关的产品

更改代码:class-wc-query.php

    if (( isset( $_GET['max_price'] ) && isset( $_GET['min_price'] )) or isset( $_GET['pro_type_sws'])) {


        $matched_products = array();
        $min    = floatval( $_GET['min_price'] );
        $max    = floatval( $_GET['max_price'] );
            $pro_type = $_GET['pro_type_sws'];

            /*
                Applying Filter based on product type query string
             *  If Product type query string set then render only those products which are related to given product data type.
             */
           if (isset( $pro_type ) ){
                // Query Update : Product type based filter applied through $pro_type query string 
                $matched_products_query = apply_filters( 'woocommerce_price_filter_results', $wpdb->get_results( $wpdb->prepare("
            SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts
            INNER JOIN $wpdb->postmeta ON ID = post_id
                            LEFT JOIN wp_term_relationships AS rel ON object_id = post_id 
            WHERE post_type IN ( 'product', 'product_variation' ) AND post_status = 'publish' AND meta_key = %s AND meta_value BETWEEN %d AND %d AND rel.term_taxonomy_id = %d
        ", '_price', $min, $max, $pro_type ), OBJECT_K ), $min, $max );

           }
           else{
                $matched_products_query = apply_filters( 'woocommerce_price_filter_results', $wpdb->get_results( $wpdb->prepare("
            SELECT DISTINCT ID, post_parent, post_type FROM $wpdb->posts
            INNER JOIN $wpdb->postmeta ON ID = post_id
            WHERE post_type IN ( 'product', 'product_variation' ) AND post_status = 'publish' AND meta_key = %s AND meta_value BETWEEN %d AND %d
        ", '_price', $min, $max ), OBJECT_K ), $min, $max );

           }


        if ( $matched_products_query ) {
            foreach ( $matched_products_query as $product ) {
                if ( $product->post_type == 'product' )
                    $matched_products[] = $product->ID;
                if ( $product->post_parent > 0 && ! in_array( $product->post_parent, $matched_products ) )
                    $matched_products[] = $product->post_parent;
            }
        }

更改核心文件从来都不是一个好主意,在每次更新时(WC每年都有很多更新),您必须再次应用您的MOD

尝试挂接同一个过滤器(在自定义插件或主题的
functions.php
)并执行以下操作:

add_filter( 'loop_shop_post_in', function(){
    if (
        ( isset( $_GET['max_price'] ) && isset( $_GET['min_price'] ) ) 
        or isset( $_GET['pro_type_sws'] )
    ){
        // do your thing
        // adjust the issets to integrate to WC behavior
        // etc
    }
});

我们可以看到您的自定义查询代码吗?@rnevius请现在检查,但只有当我传递完整的URL时才会激活,但是否有其他合适的方式,以便我可以使用localhost/wp/?post\u type=product&pro\u type\u sws=32,所以我只需传递pro\u type\u sws=32查询字符串并激活价格过滤器,您可以再填充一点吗,这样我就可以知道如何激活将参数传递给问题中提到的同一个查询,这样我就不必更改核心。我没有任何可以测试这个的设置。我的建议是恢复你的WC核心文件,并开始测试你的确切代码(和变体),看看会发生什么。任何想法或伪将参数传递给woo commerce筛选器或任何指向设置自定义筛选器的链接,以便我仔细阅读