codememo

WooCommerce "내 계정" 페이지 대시보드 검색

tipmemo 2023. 3. 9. 22:05
반응형

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 비교입니다(개인 취향이라고 생각합니다).

  1. is_wc_endpoint_url()테마 또는 플러그인에 의해 추가된 엔드포인트에 대해 false를 반환할 수 있으므로 false negative를 얻을 수 있습니다.자체 필터를 추가할 수 있는 필터가 있지만 플러그인이 이를 수행할지는 신뢰할 수 없습니다.
  2. 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

반응형