【问题标题】:Detect dashboard of WooCommerce "my account" pages检测 WooCommerce“我的帐户”页面的仪表板
【发布时间】: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() 的函数吗?

【问题讨论】:

    标签: php wordpress woocommerce conditional user-accounts


    【解决方案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 
        } 
    } 
    ?>
    

    参考:


    之后,您可以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 端点,所以这个简单的检查就可以完成这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 2020-10-30
        • 2018-05-25
        • 2017-05-24
        • 2019-10-05
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多