처리에서 보류로 주문이 작성될 때 WooCommerce 주문 상태 설정
woocommerce 주문이 작성되면 주문 상태는 "processing"이 됩니다.기본 주문 상태를 "pending"으로 변경해야 합니다.
어떻게 하면 좋을까요?
기본 주문 상태는 결제 방법 또는 결제 게이트웨이에 따라 설정됩니다.
이 커스텀 후크 기능을 사용하려고 해도 동작하지 않습니다(이 후크는 지불 방법이나 지불 게이트웨이보다 먼저 기동하기 때문에).
add_action( 'woocommerce_checkout_order_processed', 'changing_order_status_before_payment', 10, 3 );
function changing_order_status_before_payment( $order_id, $posted_data, $order ){
$order->update_status( 'pending' );
}
각 지불 수단(및 지불 게이트웨이)이 주문 상태를 설정하고 있는 것 같습니다(결제 게이트웨이의 트랜잭션 응답에 따라 다름).
배달 시 현금 지급 방법의 경우 전용 필터 후크를 사용하여 조정할 수 있습니다. 다음을 참조하십시오.
Woocommerce에서 배송 시 현금 지급 기본 주문 상태를 "처리 중"이 아닌 "보류 중"으로 변경
대신 후크를 사용하여 주문 상태를 업데이트할 수 있습니다.
add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ){
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
if( $order->get_status() == 'processing' )
$order->update_status( 'pending' );
}
코드가 기능합니다.php 파일 또는 임의의 플러그인 파일에 있는 활성 자식 테마(또는 테마)입니다.
테스트 완료 및 동작
주의: 후크
woocommerce_thankyou
주문 접수 페이지가 로드될 때마다 부팅되므로 주의해서 사용해야 합니다.
이제 위의 함수는 처음 주문 상태만 업데이트합니다.고객이 페이지를 새로고침 할 경우,IF
스테이트먼트가 일치하지 않게 되어, 그 외의 일은 발생하지 않게 됩니다.
관련 스레드:WooCommerce: 결제된 주문 자동 완료(결제 방법에 따라 다름)
요즘, 당신이 적절하게 사용하는 결제 게이트웨이가 다음을 사용하여 주문 상태를 설정한다면,WC_Order->payment_complete()
, 를 사용할 수 있습니다.woocommerce_payment_complete_order_status
필터링을 실시합니다.
이것은 사용하는 것보다 낫다.woocommerce_thankyou
훅은 이미 설정한 후에 적용하는 것이 아니라 바로 주문 상태를 설정하기 때문입니다.
function h9dx3_override_order_status($status, $order_id, $order) {
if ($status === 'processing') {
$status = 'pending';
}
return $status;
}
add_filter('woocommerce_payment_complete_order_status', 'h9dx3_override_order_status', 10, 3);
다시 말씀드리지만, 이것은 지불 게이트웨이가 적절한 값을 사용하는 경우에만 작동합니다.payment_complete
상태를 직접 설정하는 대신 래퍼 메서드를 사용합니다.set_status
게이트웨이 코드에서 'payment_complete'와 'set_status'를 검색하면 어떤 기능을 하는지 알 수 있습니다.
모든 사용자를 위한 플러그인을 개발하면 더 잘 사용할 수 있습니다.woocommerce_thankyou
또는 복합적인 접근방식을 사용할 수도 있습니다.woocommerce_thankyou
주문 상태가 업데이트되지 않은 경우 폴백으로 간주됩니다.
훅 woocommce_thanking은 주문 대금을 지불하고 브라우저를 닫거나 다른 곳으로 이동할 수 있기 때문에 "Return to Merchant"(페이팔을 통해 결제 후 표시됨)를 클릭하지 않고 감사 페이지로 이동할 수 없습니다.그러면 절대 코드가 실행되지 않을 거야
// Rename order status 'Processing' to 'Order Completed' in admin main view - different hook, different value than the other places
add_filter( 'wc_order_statuses', 'wc_renaming_order_status' );
function wc_renaming_order_status( $order_statuses ) {
foreach ( $order_statuses as $key => $status ) {
if ( 'wc-processing' === $key )
$order_statuses['wc-processing'] = _x( 'Order Completed', 'Order status', 'woocommerce' );
}
return $order_statuses;
}
언급URL : https://stackoverflow.com/questions/45985488/set-woocommerce-order-status-when-order-is-created-from-processing-to-pending
'programing' 카테고리의 다른 글
Create react 앱에서 소스 맵을 생성하는 방법 (0) | 2023.03.08 |
---|---|
Wordpress 플러그인 설치 - FTP 서버에 연결하지 못했습니다 - 가장 안전한 솔루션? (0) | 2023.03.08 |
요청된 bean이 현재 생성 중입니다.해결할 수 없는 순환 참조가 있습니까? (0) | 2023.03.08 |
MongoDB 색인된 컬럼의 count(구분 x) 선택 - 대용량 데이터 세트에 대한 고유 결과 카운트 (0) | 2023.03.08 |
2시간 이상 경과한 Firebase 데이터 삭제 (0) | 2023.03.08 |