如何检测" 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()
函数?
答案 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,因此无法用于确定您是否专门在“信息中心”页面上显示。