WooCommerce メンバーシップ サイトの「ベスト オブ」価格設定を必要とするクライアントに問題が発生しています。
クライアントは、製品がセール中の場合に会員割引が適用されることを望んでいません。ただし、販売価格が通常価格からメンバーシップ割引を差し引いた価格よりもまだ高い場合、クライアントは顧客にその価格で購入してもらいたいと考えています。
シナリオ 1:
- 通常価格 = $10
- 販売価格 = $8
- 会員割引付きの販売価格 = $4 (クライアントはこれを望んでいません)
- メンバーシップ価格 = 5 ドル(これはより良い価格であるため、顧客はセール価格ではなくこの価格を取得する必要があります)
シナリオ 2:
- 通常価格 = $10
- 販売価格 = 4 ドル(これはより良い価格であるため、顧客はこれを購入し、製品にメンバーシップ割引を適用する必要はありません)
- 割引ありの販売価格 = $2 (クライアントはこれを望んでいません)
- 会員価格 = $5
これまでのところ、次のフィルターに接続しています。
add_filter( 'woocommerce_product_get_sale_price', 'qctj_get_member_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price','qctj_get_member_price', 10, 2 );
add_filter( 'woocommerce_product_get_price', 'qtjc_get_member_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'qctj_get_member_price', 10, 2 );
しかし、 $product->is_on_sale(); を実行すると check 無限ループになり、サイトがクラッシュします。
考えられるプロセスは、製品がセール中かどうかを確認し、セール価格と通常価格から会員割引を差し引いた価格を確認し、どちらがより良い価格であるかを判断することです。セール価格の方が良い場合は、wc_memberships_exclude_product_from_member_discountsフィルターを呼び出し、それを true にオーバーライドして、セール価格での会員割引を無効にします。
is_on_sale() 関数呼び出しが無限ループを作成しているように見えるため、明らかに機能していません。それ以外の場合は、おそらく既に機能しています。
誰でもこれについて提案がありますか?