WooCommerce "내 계정" 페이지 대시보드 검색
대시보드에서 "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
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>
테스트 및 동작.
원답:
네, 물론 고객의 계정 페이지에 true를 반환하는 기본 WooCommerce 조건도 있습니다.
다음으로 및 을 사용하는 예를 나타냅니다.my account link URL을 얻으려면: 를 사용합니다.
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 동작을 미세 조정할 수 있습니다.
[내 계정(My Account)]영역에서 정확한 페이지를 검출하기 위해 (사용 중인 템플릿을 판별할 수 있도록) Woocommerce는 방법을 제공하지 않습니다.
현재 URL을 Vanilla PHP로 취득하여 Dashboard/My Account Home 페이지로 설정되어 있는 페이지의 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를 반환하므로 대시보드 페이지에 있는지 여부를 확인하는 데 사용할 수 없습니다.
저도 같은 질문이 있었어요(몇 년 후, lol).왜 도움이 되지 않는지 궁금하신 분들을 위해 woocomme에서 사용 가능한 엔드포인트 감지 기능이 준비되어 있습니다.여기서 사용할 수 있는 기능 목록을 읽을 수 있습니다.
이것은 woocommerce 문서에서 직접 가져옵니다.나중에 링크가 끊어질까 봐 그냥 복사하는 거예요.
is_account_page() => 고객 계정 페이지에서 true를 반환합니다.
is_wc_commerce_url() => WooCommerce 엔드포인트를 표시할 때 true를 반환합니다.
is_wc_pay_url('order-pay') => 주문대금의 엔드포인트 페이지가 표시되는 경우.
is_wc_module_url('order-module') => 받은 주문의 엔드포인트 페이지가 표시되는 경우.
is_wc_view_url('view-order') => 뷰 순서의 엔드포인트 페이지가 표시되는 경우.
is_wc_count_url('edit-account') => 계정 편집용 엔드포인트 페이지가 표시되는 경우.
is_wc_syslog_url('edit-address') => 주소 편집용 엔드포인트 페이지가 표시되는 경우.
is_wc_password_url('lost-password') => 비밀번호 분실의 엔드포인트 페이지가 표시되는 경우.
is_wc_syslog_url('customer-logout') => 고객 로그아웃 엔드포인트 페이지가 표시되는 경우.
is_wc_payment_url('add-payment-payment-url') => 추가결제수단 엔드포인트 페이지가 표시되는 경우.
실제로 저는 네이티브 WC 코드만으로 WC Dashboard 페이지를 검출하기 위해 정상적으로 동작하는 것으로 보이는 이 조건을 발견했습니다.
if (is_user_logged_in() && is_account_page() && !is_wc_endpoint_url()) {
echo 'WC Dashboard';
} else {
echo 'no WC Dashboard';
}
<?php if(is_page("account") && !is_wc_endpoint_url()) { ?>
계정 페이지가 /account/에 있다고 가정하면 대시보드가 검색됩니다.
이 기만면면면면만 is_page("account")모든 계정 페이지에 대해 조건이 트리거됩니다.'View-order' 'last-password' 'WC Endpoint' 'Last-password' 입니다.
대시보드도 구체적으로 식별해야 하고 이 질문을 찾았지만 답변이 마음에 들지 않았고 WooCommerce에는 아직 이 작업을 위한 태그가 내장되어 있지 않습니다.
두 , 첫 문제는 입니다.is_wc_endpoint_url()(틀림없이) 두 번째는 URL 비교입니다(개인 취향이라고 생각합니다).
is_wc_endpoint_url()테마 또는 플러그인에 의해 추가된 엔드포인트에 대해 false를 반환할 수 있으므로 false negative를 얻을 수 있습니다.자체 필터를 추가할 수 있는 필터가 있지만 플러그인이 이를 수행할지는 신뢰할 수 없습니다.- URL을 비교하는 것은 나에게 해킹처럼 느껴진다.신뢰할 수 있는 결과를 얻을 수 있고 매우 간단하기 때문에 반드시 나쁜 방법은 아닙니다.URL의 일부를 하드코딩하지 않거나 적어도 번역할 수 있도록 하겠습니다.
생각해보면 WooCommerce 자체는 대시보드를 언제 로드할지를 확실히 알고 있습니다.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')
언급URL : https://stackoverflow.com/questions/38444557/detect-dashboard-of-woocommerce-my-account-pages
'codememo' 카테고리의 다른 글
| JSONL 파일을 JSON 개체로 로드하는 중 (0) | 2023.03.09 |
|---|---|
| 잭슨 JSON을 사용한Spring MVC에서의 JSON 해석 (0) | 2023.03.09 |
| ASP.NET MVC Ajax이미지가 있는 ActionLink (0) | 2023.03.09 |
| 워드프레스 위젯 코드는 어디에 저장합니까? (0) | 2023.03.09 |
| Spring Boot & Spring Security 응용 프로그램에서 정적 웹 리소스 제공 (0) | 2023.03.09 |