2014-04-24 1 views
3

에 없는지 확인하는 방법. 내 체크 아웃 페이지에는 사용자 정의 페이지 템플리트 (page-checkout.php)가 있으며, 이제 모든 체크 아웃 엔드 포인트는이 사용자 정의 페이지 템플리트를 사용합니다.주문 수신과 같은 WooCommerce 2.1 페이지가 제거되어 WC 엔드 포인트로 대체 되었기 때문에 WoCommerce 엔드 포인트

고객이/checkout/page에있을 때만 머리글과 바닥 글을 수정해야하지만 체크 아웃 엔드 포인트에있을 때 다른 내용을 표시하려고합니다. 이 조건부를 찾았습니다.

if(is_wc_endpoint_url("order-received")) echo "yes"; 

"주문을받은"체크 포인트 엔드 포인트에있을 때 작동합니다. 하지만 우리가 종단점에 있지 않을 때 알려주는 조건부 논리를 찾고 있습니다.

고맙습니다. 기능 다음

답변

1

보십시오 :

function is_wc_endpoint() { 
    if (empty($_SERVER['REQUEST_URI'])) return false; 
    $url = parse_url($_SERVER['REQUEST_URI']); 
    if (empty($url['query'])) return false; 
    global $wpdb; 
    $all_woocommerce_endpoints = array(); 
    $results = $wpdb->get_results("SELECT option_name, option_value FROM {$wpdb->prefix}options WHERE option_name LIKE 'woocommerce_%_endpoint'", 'ARRAY_A'); 
    foreach ($results as $result) { 
     $all_woocommerce_endpoints[$result['option_name']] = $result['option_value']; 
    } 
    foreach ($all_woocommerce_endpoints as $woocommerce_endpoint) { 
     if (strpos($url['query'], $woocommerce_endpoint) !== false) { 
      return true; 
     } 
    } 
    return false; 
} 

은 당신이 기대하는 결과를 줄 것이다 바랍니다.

+0

고마워. 작동한다. 그러나 나는 그것이 너무 많은 쿼리를 필요로한다고 생각하지 않습니까? 더 단순한 조건문이 존재하지 않습니까? – retroriff

2

이것은 향후 woocommerce 버전에 포함될 is_wc_endpoint_url 함수의 절대 버전입니다. 그래서 다른 이름을주고 function.php와 같이 넣으십시오.

function is_wc_endpoint_url($endpoint = false) { 
global $wp; 

$wc_endpoints = WC()->query->get_query_vars(); 

if ($endpoint) { 
    if (! isset($wc_endpoints[ $endpoint ])) { 
     return false; 
    } else { 
     $endpoint_var = $wc_endpoints[ $endpoint ]; 
    } 

    return isset($wp->query_vars[ $endpoint_var ]); 
} else { 
    foreach ($wc_endpoints as $key => $value) { 
     if (isset($wp->query_vars[ $key ])) { 
      return true; 
     } 
    } 
    return false; 
} 
} 
+0

그 기능은 이미 작동 중입니다. 나는 그것을 사용하고있다 : if (is_wc_endpoint_url ("order-received")) $ thanks-page = 1; – retroriff

4

질문에 대한 답변이 조금 오래된 것 같습니다. 그러나 나는 다른 사람을 도울 수있는 더 나은 해결책을 찾았습니다.

다음과 같은 기능을 사용할 수 있습니다. Documentation 매개 변수없이 사용할 경우

is_wc_endpoint_url() 

, 모든 엔드 포인트에 대해 현재의 URL을 확인합니다. 엔드 포인트가

is_wc_endpoint_url('edit-account'); 

과 같이 지정되면 URL은 특정 엔드 포인트인지 여부를 점검합니다.