检测WooCommerce的仪表板"我的帐户"网页

时间:2016-07-18 19:29:29

标签: php wordpress woocommerce conditional user-accounts

如何检测" myaccount / my-account.php"模板用于仪表板。

目前我使用:

<?php
    global $wp;
    if ( !isset($wp->query_vars['page']) ) {
?>
    <a href="/mein-konto/">Back to my Account</a>
<?php } ?>

<div class="myaccount_content">
    <?php
        do_action( 'woocommerce_account_content' );
    ?>
</div>

但这感觉有点哈哈。是不是有is_myaccount_dashboard()函数?

5 个答案:

答案 0 :(得分:6)

更新:专门检测我的帐户&#34;信息中心&#34; 页面

<?php
    global $wp;
    $request = explode( '/', $wp->request );

    // If NOT in My account dashboard page
    if( ! ( end($request) == 'my-account' && is_account_page() ) ){ 
?>
    <a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id')); ?>">Back to my Account Dashboard</a>
<?php 
    } 
?>

<div class="myaccount_content">
    <?php
        do_action( 'woocommerce_account_content' );
    ?>
</div>

经过测试和工作。

原始回答:

是的,当然有 is_account_page() 原生WooCommerce条件,在客户的帐户页面上返回true。

以下是使用 is_account_page() is_user_logged_in() 的示例。要获取我的帐户关联网址,您可以使用: get_permalink( get_option('woocommerce_myaccount_page_id') )

if ( !is_account_page() ) { // User is NOT on my account pages

    if ( is_user_logged_in() ) { // Logged in user

    // Link to "My Account pages dashboard". 
?>  
    <a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id') ); ?>" title="<?php _e('My Account', 'woocommerce'); ?>"><?php _e( 'My Account', 'woocommerce' ); ?></a>
<?php }
    else { // User is NOT logged in

    // Link to "Login / register page".
?>  
    <a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id') ); ?>" title="<?php _e( 'Login / Register','woocommerce' ); ?>"><?php _e( 'Login / Register', 'woocommerce' ); ?></a>

<?php 
    } 
} 
?>

参考:

之后,您可以Override WooCommerce Templates via a Theme使用我的帐户模板微调更多WooCommerce行为......

答案 1 :(得分:0)

我有同样的问题(多年以后,大声笑)。对于那些正在寻找答案并想知道为什么它没有帮助的人们,woocommerce中提供了端点检测功能,它们可以完全满足您的需求。您可以阅读here可用的功能列表。

这直接来自woocommerce文档。我只是复制它,以防将来链接断开

is_account_page()=> 在客户的帐户页面上返回true。

is_wc_endpoint_url()=> 查看任何WooCommerce端点时返回true

is_wc_endpoint_url('order-pay')=> 显示订单付款的端点页面时。

is_wc_endpoint_url('order-received')=> 显示接收订单的端点页面时。

is_wc_endpoint_url('view-order')=> 显示查看顺序的端点页面时。

is_wc_endpoint_url('edit-account')=> 显示编辑帐户的端点页面时。

is_wc_endpoint_url('edit-address')=> 显示编辑地址的端点页面时。

is_wc_endpoint_url('lost-password')=> 显示密码丢失的端点页面时。

is_wc_endpoint_url('customer-logout')=> 当显示用于客户注销的端点页面时。

is_wc_endpoint_url('add-payment-method')=> 显示添加付款方式的端点页面时。

答案 2 :(得分:0)

<?php if(is_page("account") && !is_wc_endpoint_url()) { ?>

假设您的帐户页面位于/ account /,这将检测到您的仪表板。

如果仅执行is_page("account"),则该条件将触发所有帐户页面。但是,由于仪表板不像“视图顺序”或“最后密码”那样被认为是WC端点,因此此简单的检查即可完成工作。

答案 3 :(得分:0)

实际上,我发现这种情况似乎可以正常工作,以便仅使用本机WC代码检测WC Dashboard页面:

    if (is_user_logged_in() && is_account_page() && !is_wc_endpoint_url()) {
      echo 'WC Dashboard';
    } else {
      echo 'no WC Dashboard';
    }

答案 4 :(得分:-1)

要在“我的帐户”区域内检测您所在的确切页面(以便您确定正在使用的模板),我不认为Woocommerce提供了一种方式。

我认为您必须使用vanilla PHP获取当前网址,并将其与设置为信息中心/我的帐户主页的网页的网址进行比较。

e.g。

$current_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$dashboard_url = get_permalink( get_option('woocommerce_myaccount_page_id'));

if($dashboard_url == $current_url){
    // do your stuff here
}

Woocommerce的is_account_page()条件函数将对所有“我的帐户”子页面返回true,因此无法用于确定您是否专门在“信息中心”页面上显示。