WooCommerce 버전 5.6 이상을 사용하는 신규 고객의 경우 특정 결제 수단을 숨길 수 있습니다.
P粉283559033
2023-08-15 13:19:37
<p>사용자가 주문을 완료했는지 확인하는 스크립트를 만들었습니다. 사용자가 완료된 주문이 없으면 결제 수단 '수표'가 비활성화됩니다. 이 기능은 작동하지만 function.php 파일에 추가한 후 페이지를 탐색할 때 심각한 성능 문제가 발생합니다. 최적화 가능성이 보이시나요? 아니면 문제가 있는 부분이 있나요? </p>
<pre class="brush:php;toolbar:false;">함수 has_bought() {
// 모든 고객 주문을 가져옵니다.
$customer_orders = get_posts( 배열(
'번호 포스트' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order', // WC 주문 기사 유형
'post_status' => 'wc-completed' // 상태가 "완료"인 주문만 포함합니다.
) );
// 고객이 이미 주문한 경우 "true"를 반환합니다.
반환 횟수( $customer_orders ) > 0 ? true: false;
}
add_filter('woocommerce_available_pay_gateways', 'customize_pay_gateways');
함수customize_pay_gateways($gateways) {
if (!has_bought()) {
if (isset($gateways['cheque'])) {
// "수표" 결제 게이트웨이 취소
unset($gateways['cheque']);
}
}
$gateways를 반환합니다.
}</pre>
사용자 지정 사용자 메타데이터를 사용하고 WooCommerce 버전 5.8 이상부터 사용할 수 있는
WC_Customer
类中已经有一个轻量级的内置功能,使用get_is_paying_customer()
메서드 덕분에 고객에게 결제 주문이 있는지 확인하기 위해 더 무거운 쿼리를 사용할 필요가 없습니다.다음을 사용하여 신규 고객에 대한 "수표" 결제를 비활성화할 수 있습니다.
으아악차일드 테마의 function.php 파일(또는 플러그인)에 코드를 배치하세요. 테스트를 거쳐 사용 가능합니다.