开发者问题收集

如何检查我们不在 Woocommerce 端点中

2014-04-24
11213

自 WooCommerce 2.1 以来,诸如 order-received 之类的页面已被删除并替换为 WC 端点。我的结帐页面有一个自定义页面模板 (page-checkout.php),现在所有结帐端点也都使用此自定义页面模板。

我只需要在客户位于 /checkout/ 页面时修改页眉和页脚,但我想在他们位于结帐端点时显示不同的内容。我发现了这个条件:

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

当我们处于“order-received”结帐端点时,它可以工作。但我正在寻找一个条件逻辑,它可以告诉我我们何时不在端点中,例如:

if(!is_wc_endpoint()) echo "yes";

谢谢。

3个回答

这些问题似乎已经得到解答,但有点过时了。但我找到了一个更好的解决方案,这可能会对其他人有所帮助。

您可以使用以下函数。 文档

is_wc_endpoint_url()

如果使用时不带参数,它将针对所有端点检查当前 url。如果指定了端点,如

is_wc_endpoint_url('edit-account');

它将检查 url 是否属于特定端点。

S. A. Malik
2016-04-05

尝试以下函数:

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;
}

希望它能给您带来您期望的结果。

Ratnakar - StoreApps
2014-04-24

这是 is_wc_endpoint_url 函数的永久版本,将包含在未来的 woocommerce 版本中。因此,只需为其指定一个不同的名称,然后将其放入您的 functions.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;
 }
}
lonwi
2015-02-10