2017-02-28 5 views
1

, 나는 "페이팔"순서가 처음으로 만든 그냥 "배달 현금"를 표시하기 전에 페이지 "체크 아웃"에 게이트웨이를 숨기고 싶습니다 게이트웨이 (예약). 체크 아웃/주문 지불 페이지 한편 조건부 숨어 외 보여주는 지불 게이트웨이 Woocommerce에서

, 주문 상태는 "보류"를 '준비' 게이트웨이를 숨기고 "페이팔"을 보여줄 때. (이는 주문 상태를 "계류 중"으로 수동 변경하고 결제 링크가있는 고객에게 인보이스를 보낼 때 발생합니다.)

주문 상태를 확인하고 woocommerce_available_payment_gateways 필터 걸이를 사용해야한다고 생각했습니다. 하지만 현재 주문 상태를 확인하는 데 문제가 있습니다.

또한 사용자가 체크 아웃 페이지에 새로 생성 한 주문의 상태가 무엇 인지도 모르겠지만 여전히 주문은 관리자 백엔드에 표시되지 않습니다.

이 내 불완전 코드입니다

function myFunction($available_gateways) { 

    // How to check if the order's status is not pending payment? 
    // How to pass the id of the current order to wc_get_order()? 
    $order = wc_get_order($order_id); 

    if (isset($available_gateways['cod']) && /* pending order status?? */) { 
     // hide "cod" gateway 
    } else { 
     // hide "paypal" gateway 
    } 
    return $available_gateways; 
} 
add_filter('woocommerce_available_payment_gateways', 'myFunction'); 

가 나는 또한 get the current orderWC()->query_vars['order'] 대신 wc_get_order();을 시도하고 상태를 확인하지만, 너무 작동하지 않았다.

sawwoocommerce_order_items_table 조치 후크 중 하나라도 주문을받을 수 없습니다.

체크 아웃/주문 - 지불 페이지에서 주문의 ID와 상태를 어떻게 검색 할 수 있습니까?

답변

1

내가 제대로 이해했다면 상태가 "paypal"게이트웨이를 갖기 위해 대기중인 실시간 생성 된 주문에 따라 사용 가능한 지불 게이트웨이를 설정/설정 해제하려고합니다. 다른 모든 경우에 사용 가능한 게이트웨이는 "예약"(이름이 "대구"지불 게이트웨이) 인 것입니다. 어떤 플러그인 파일도

add_filter('woocommerce_available_payment_gateways', 'custom_available_payment_gateways'); 
function custom_available_payment_gateways($gateways) { 

    $url_arr = explode('/', $_SERVER['REQUEST_URI']); 
    if($url_arr[1] == 'checkout' && $url_arr[2] == 'order-pay' && is_user_logged_in()){ 
     $order_id = intval($url_arr[3]); 
     $order = wc_get_order($order_id); 
     if($order->has_status('pending')) 
      unset($gateways['cod']); 
     else 
      unset($gateways['paypal']); 
    } else 
     unset($gateways['paypal']); 

    return $gateways; 
} 

코드 활성 자식 테마 (또는 테마)의 function.php 파일에 간다 나 :

이 코드는이 식으로 $_SERVER['REQUEST_URI']를 사용하여이 라이브 주문 ID를 검색 .

코드는 테스트되었으며 작동합니다.

+0

많은 감사 Loic, 그것은 매력처럼 작동했습니다. – DummyBeginner