检测 WooCommerce“我的帐户”页面的仪表板

Posted

技术标签:

【中文标题】检测 WooCommerce“我的帐户”页面的仪表板【英文标题】:Detect dashboard of WooCommerce "my account" pages 【发布时间】:2016-11-21 12:34:09 【问题描述】:

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

【问题讨论】:

【参考方案1】:

更新:专门检测我的帐户“仪表板”页面

<?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 
     
 
?>

参考:

Official WooCommerce Conditional Tags Display My Account link in a template file

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

【讨论】:

is_account_page() 不能用于检测“我的帐户”页面的“仪表板” - 此函数对所有“我的帐户”页面返回 true。 @丹。是的,我知道... “我如何检测“myaccount/my-account.php”是否“” 您的原始答案没有解决问题(既不是问题标题中的问题,也不是问题中的问题)。您现在刚刚发布了一些确实解决了他的问题的内容,但这显然不会使我之前的评论和投票无效。谁对我的回答投了反对票(不是指手画脚)显然只是有骨头要挑。我的解决方案绝对解决了这个问题哈哈 @丹。你真的很聪明、聪明、成熟。恭喜! 我知道我是。我认为我的论点结构很好。我非常有信心我在前面的评论中所说的一切都是有效的。你为什么不向我解释为什么你的原始答案解决了这些问题,也许我可以被说服我错了/得到了错误的观点。关于否决票 - 我很确定没有回答问题的答案是否决票的基础。最重要的是,我对自己感到失望,因为我允许这占用我的时间,而我不会从中受益。我想我只是人类。【参考方案2】:

我也有同样的问题(多年后,哈哈)。对于那些查看答案并想知道为什么它没有帮助的人来说,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('编辑地址') => 显示编辑地址的端点页面时。

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

这个对我来说很完美。我不喜欢尝试检查页面的实际 URL 的想法,因为这可能会改变。此解决方案以一种有意义的方式使用条件函数。我在 body_class 过滤器中使用它来添加一类 woocommerce-account-dashboard 用于样式设置。【参考方案4】:

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

我认为您必须使用普通 PHP 获取当前 URL,并将其与设置为仪表板/我的帐户主页的页面的 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

Woocommerce 的 is_account_page() 条件函数将为所有“我的帐户”子页面返回 true,因此不能用于确定您是否专门在仪表板页面上。

【讨论】:

这很好用。不知道为什么这不是答案。【参考方案5】:
<?php if(is_page("account") && !is_wc_endpoint_url())  ?>

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

如果您只执行is_page("account"),条件将触发所有帐户页面。但是,由于仪表板不像“view-order”或“last-password”那样被视为 WC 端点,所以这个简单的检查就可以完成这项工作。

【讨论】:

以上是关于检测 WooCommerce“我的帐户”页面的仪表板的主要内容,如果未能解决你的问题,请参考以下文章

我的帐户模板中的 Woocommerce 当前端点页面标题

Woocommerce 我的帐户页面为新客户运行了一个额外的循环

WooCommerce 不会将密码发送给在“我的帐户”页面上注册的客户

WooCommerce:将端点分配给我的帐户页面中的自定义模板

WooCommerce 我的帐户页面的自定义电话号码占位符

Woocommerce 如何在我的帐户页面上重定向自定义端点