因为订单收到的WooCommerce 2.1页面已被删除并替换为WC端点。我的结帐页面有一个自定义页面模板(page-checkout.php),现在所有结帐端点也使用此自定义页面模板。
我只需要在客户位于/ checkout /页面时修改我的页眉和页脚,但我想在结帐端点时显示不同的内容。我发现这是有条件的:
if(is_wc_endpoint_url("order-received")) echo "yes";
当我们处于"订单收到"结账终点。但我正在寻找一种条件逻辑,告诉我什么时候我们不在一个端点,如:
if(!is_wc_endpoint()) echo "yes";
谢谢。
答案 0 :(得分:6)
这些问题似乎得到了回答而且有点陈旧。但我找到了一个更好的解决方案,这可能会帮助其他人。
您可以使用以下功能。 Documentation
is_wc_endpoint_url()
如果在没有参数的情况下使用,它将检查针对所有端点的当前URL。如果端点指定为
is_wc_endpoint_url('edit-account');
它会检查网址是否属于特定端点。
答案 1 :(得分:2)
这是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;
}
}
答案 2 :(得分: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;
}
希望它能给你你想要的结果。