3

私は WooCommerce を使用するプロジェクトに取り組んでおり、特定の価格制限のあるショップ ページにつながるカスタム リンクを追加する必要がありました。組み込みの WooCommerce 価格フィルター ウィジェットは使用できませんでしたが、次の URL の静的リンクを追加しました。

http://my.domain.com/shop?min_price=0&max_price=2000

shopWooCommerce Shop ページのページはどこですか。残りのパラメーターを URL に追加しました。

ショップページを開いたとき、製品はまだそこにありますが、何もフィルタリングされていません - 何が間違っていますか? これは Price Filter Widget が使用している原則と同じですか?

4

2 に答える 2

6

URL パラメーターが何もしない理由は、WooCommerce が価格フィルター ウィジェットがアクティブな場合にのみ価格フィルターを実行するためです。

これを回避するには、価格フィルターを初期化する woocommerce 関数を使用して名前を変更し、ウィジェットがアクティブでない場合でもフィルターを実行するように変更します。次に、woocommerce 価格フィルター初期化関数のフックを解除し、自分のものを接続します。

つまり、これを functions.php ファイルに入れます。

function my_price_filter_init() {
    global $woocommerce;

    if ( ! is_admin() ) {

        unset( $_SESSION['min_price'] );
        unset( $_SESSION['max_price'] );

        if ( isset( $_GET['min_price'] ) )
            $_SESSION['min_price'] = $_GET['min_price'];

        if ( isset( $_GET['max_price'] ) )
            $_SESSION['max_price'] = $_GET['max_price'];

        add_filter( 'loop_shop_post_in', 'woocommerce_price_filter' );
    }
}
remove_action('init', 'woocommerce_price_filter_init');
add_action( 'init', 'my_price_filter_init' );

これは、 widget-price_filter.php の woocommerce_price_filter_init を変更したものです。上記の関数は、価格フィルター ウィジェットを実行する JavaScript をロードしません。そのため、ウィジェットを機能させる必要がある場合は、それを元に戻す必要があります (または、お知らせいただければ、編集して元に戻します)。

于 2013-01-28T20:02:43.533 に答える
0

woocommerce カスタム価格フィルター html ページまたは woocommerce アーカイブ ページまたはサイドバーもお好みで使用できます。 (jquery と php)

<script>
<?php
global $wp;
$current_url = home_url( add_query_arg( array(), $wp->request ) );
?>      
        $('select').change(function() {
            //alert("document ready occurred!");
            var min = $( "#min_price" ).val();
            var max = $( "#max_price" ).val();
            //alert(min);
            if(min!=''&& max!=''){
                 var url = "<?php echo $current_url;?>/?min_price="+min+"&max_price="+max;
                window.location.href = url;
            }
        });
    </script>
于 2020-03-06T11:14:18.223 に答える