php 检测WooCommerce“我的帐户”页面的 Jmeter 板

mpbci0fu  于 2023-02-03  发布在  PHP
关注(0)|答案(6)|浏览(145)

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

fcy6dtqo

fcy6dtqo1#

    • 更新:专门检测"我的帐户"" Jmeter 板"**页面
<?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条件,在客户的账户页面上返回真。
下面是使用
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行为...

3zwtqj6y

3zwtqj6y2#

要检测您所在的确切页面,在我的帐户区域内,(允许您确定正在使用的模板),我不认为Woocommerce提供了一种方法。
我认为您必须使用普通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
}

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

dpiehjr4

dpiehjr43#

我也有同样的问题(几年后,哈哈).对于那些看到答案并想知道为什么它没有帮助的人来说,woocommerce中有一些端点检测功能可以做你想做的事情.你可以阅读here中可用的功能列表.

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

is_account_page()=〉在客户的帐户页面上返回true。
is_wc_endpoint_url()=〉查看任何WooCommerce端点时返回真
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')=〉显示添加支付方式的端点页面时。

epfja78i

epfja78i4#

事实上,我发现这个条件似乎工作正常,以检测WC Jmeter 板页面与本机WC代码只:

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

ars1skjm5#

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

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

6pp0gazn

6pp0gazn6#

我还需要确定 Jmeter 板具体,发现了这个问题,但我不喜欢任何答案和WooCommerce仍然没有内置的标签来做到这一点...
我有两个问题的答案,第一个是使用is_wc_endpoint_url()(不是万无一失),第二个是比较网址(个人口味,我猜?)

  1. is_wc_endpoint_url()可以为主题或插件添加的端点返回false,因此您可以获得假阴性。有一个过滤器,因此您可以添加自己的端点,但您不能相信插件会这样做。
    1.比较URL对我来说有点笨拙。你可能会得到可信的结果,而且很简单,所以这不一定是一个坏方法。尽管我会放弃硬编码URL的部分,或者至少允许翻译。
    现在,如果你想一想,WooCommerce本身知道什么时候加载dashboard.php,所以我只是把代码和重构它,以简单地识别 Jmeter 板:
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')的人

相关问题