WooCommerce バージョン 5.6 以降を使用する新規顧客は、特定の支払い方法を非表示にすることが可能です
<p>ユーザーが注文を完了したかどうかを確認するスクリプトを作成しました。ユーザーが完了した注文を持っていない場合、支払い方法「小切手」は無効になります。この関数は機能しますが、functions.php ファイルに追加した後、ページを参照するときに重大なパフォーマンスの問題が発生します。最適化の可能性や問題がどこにあるのか考えられますか? </p>
<pre class="brush:php;toolbar:false;">function has_bought() {
// 顧客の注文をすべて取得する
$customer_orders = get_posts( array(
'numberposts' => -1、
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order', // WC オーダー商品タイプ
'post_status' => 'wc-completed' // ステータスが「completed」の注文のみを含めます
) );
// 顧客がすでに注文している場合は「true」を返します
return count( $customer_orders ) > 0 ? true : false;
}
add_filter('woocommerce_available_payment_gateways', 'customize_payment_gateways');
関数カスタマイズ_支払い_ゲートウェイ($ゲートウェイ) {
if (!has_bought()) {
if (isset($gateways['cheque'])) {
// 「小切手」支払いゲートウェイをキャンセルします
unset($gateways['cheque']);
}
}
$gateways を返します。
}</pre>