检测WooCommerce "my account"页面的仪表板



如何检测仪表板上是否使用了"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()函数的东西吗?

更新:特别检测我的帐户"Dashboard"页面

<?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()的示例。要获取我的帐户链接url,您可以使用: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 
    } 
} 
?>

参考:

  • WooCommerce官方条件标签
  • 在模板文件中显示"我的帐户"链接

之后,您可以使用我的帐户模板通过主题覆盖WooCommerce模板,以微调更多WooCommCommerce行为…

要在"我的帐户"区域检测您所在的确切页面(以便您确定正在使用哪个模板),我认为Wooccommerce没有提供方法。

我认为您必须使用普通PHP获取当前URL,并将其与设置为Dashboard/My Account主页的页面的URL进行比较。

例如

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

Wooccommerce的is_account_page()条件函数将为所有"我的账户"子页面返回true,因此不能用于确定您是否专门在Dashboard页面上。

我也有同样的问题(多年后,哈哈)。对于那些正在寻找答案并想知道为什么它没有帮助的人来说,wooccommerce中有一些端点检测功能,它们正是你想要的。您可以在此处阅读可用功能列表。

这是直接从wooccommerce文档中获取的。我只是复制它,以防将来链接断开

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

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

is_wc_endpoint_url("订单支付")=>显示订单付款的端点页面时。

is_wc_endpoint_url("收到订单")=>显示收到订单的端点页面时。

is_wc_endpoint_url("查看顺序")=>显示查看顺序的端点页面时。

is_wc_endpoint_url("编辑帐户")=>显示编辑帐户的端点页面时。

is_wc_endpoint_url("编辑地址")=>显示编辑地址的端点页面时。

is_wc_endpoint_url("丢失密码")=>当显示丢失密码的端点页面时。

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

is_wc_endpoint_url("添加付款方式")=>当显示添加付款方式的端点页面时。

事实上,我发现这个条件似乎可以很好地工作,以便检测到只有本地WC代码的WC Dashboard页面:

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

我还需要具体识别仪表板,并找到了这个问题,但我不喜欢任何答案,WooCommerce仍然没有内置标签来完成这项工作。。。

我的答案有两个问题,第一个是使用is_wc_endpoint_url()(不是绝对正确的),第二个是比较URL(我想是个人品味?)

  1. 对于以下端点,is_wc_endpoint_url()可能返回false由主题或插件添加,这样你就可以得到假阴性。有一个过滤器,这样你就可以添加自己的,但你不能相信一个插件会这么做的
  2. 比较URL对我来说很难。你可能会值得信赖的结果,而且它非常简单,所以它不是这肯定是一种糟糕的方法。尽管我会放弃对URL的硬编码部分,或者至少允许翻译

现在,如果你仔细想想,WooCommerce本身就知道什么时候加载dashboard.php,所以我只是取了代码并对其进行了重构,以简单地识别仪表板:

function is_dashboard(){
    global $wp;
    if( ! empty( $wp->query_vars ) ){
        foreach ( $wp->query_vars as $key => $value ) {
            // Ignore pagename param.
            if ( 'pagename' === $key ) {
                continue;
            }
            if ( has_action( 'woocommerce_account_' . $key . '_endpoint' ) ) {
                return false;
            }
        }
    }
    return true;
}

对我来说,这是最简单的方法,尽管如果做得正确,比较URL可能就足够了。在这个问题上,你不能相信is_wc_endpoint_url()

希望这能帮助任何仍在寻找is_dashboard()is_account_page('dashboard') 的人

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

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

如果只执行is_page("account"),则条件将触发所有帐户页面。然而,由于仪表板不像"查看顺序"或"最后密码"那样被视为WC端点,因此这种简单的检查就可以完成任务。

相关内容

  • 没有找到相关文章

最新更新