Dashboard von WooCommerce-Seiten „Mein Konto“ erkennen

Lesezeit: 6 Minuten

Benutzeravatar von René Meye
René Meye

Wie kann ich erkennen, ob die Vorlage „myaccount/my-account.php“ auf dem Dashboard verwendet wird.

Derzeit verwende ich:

<?php
    global $wp;
    if ( !isset($wp->query_vars['page']) ) {
?>
    <a href="https://stackoverflow.com/mein-konto/">Back to my Account</a>
<?php } ?>

<div class="myaccount_content">
    <?php
        do_action( 'woocommerce_account_content' );
    ?>
</div>

Aber das fühlt sich irgendwie hackig an. Gibt es nicht sowas wie ein is_myaccount_dashboard() Funktion?

Benutzeravatar von LoicTheAztec
LoicTheAztec

Aktualisieren: Speziell das Mein Konto erkennen “Armaturenbrett” Seite

<?php
    global $wp;
    $request = explode( "https://stackoverflow.com/", $wp->request );

    // If NOT in My account dashboard page
    if( ! ( end($request) == 'my-account' && is_account_page() ) ){ 
?>
    <a href="https://stackoverflow.com/questions/38444557/<?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>

Getestet und funktioniert.


Ursprüngliche Antwort:

Ja natürlich gibt es das is_account_page() native WooCommerce-Bedingung, die auf den Kontoseiten des Kunden wahr zurückgibt.

Hier ist ein Beispiel mit is_account_page() und is_user_logged_in(). Um die Link-URL meines Kontos zu erhalten, können Sie Folgendes verwenden: 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="https://stackoverflow.com/questions/38444557/<?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="https://stackoverflow.com/questions/38444557/<?php echo get_permalink( get_option("woocommerce_myaccount_page_id') ); ?>" title="<?php _e( 'Login / Register','woocommerce' ); ?>"><?php _e( 'Login / Register', 'woocommerce' ); ?></a>

<?php 
    } 
} 
?>

Bezug:


Danach können Sie Überschreiben Sie WooCommerce-Vorlagen über ein Design Verwenden meiner Kontovorlagen, um noch mehr WooCommerce-Verhaltensweisen zu optimieren …

  • is_account_page() kann nicht verwendet werden, um „Das Dashboard“ der „Mein Konto“-Seiten zu erkennen – diese Funktion gibt „true“ für alle „Mein Konto“-Seiten zurück.

    – Dan.

    21. Dezember 2017 um 12:15 Uhr

  • @Dan. Ja, ich weiß… “Wie kann ich feststellen, ob die Datei “myaccount/my-account.php””

    – LoicTheAztec

    21. Dezember 2017 um 12:39 Uhr

  • Ihre ursprüngliche Antwort hat die Frage nicht gelöst (weder die im Fragentitel noch die in der Frage). Sie haben gerade etwas gepostet, das seine Frage löst, aber das macht meinen früheren Kommentar und meine Ablehnung offensichtlich nicht ungültig. Wer auch immer meine Antwort abgelehnt hat (ohne mit dem Finger zu zeigen), hatte offensichtlich nur ein Hühnchen zu rupfen. Meine Lösung löst definitiv die Frage lol

    – Dan.

    21. Dezember 2017 um 17:24 Uhr


  • @Dan. Du bist wirklich sehr schlau, intelligent und reif. Herzliche Glückwünsche!

    – LoicTheAztec

    21. Dezember 2017 um 18:00 Uhr


  • Ich weiß, ich bin. Ich strukturiere meine Argumentation ziemlich gut, denke ich. Ich bin mir ziemlich sicher, dass alles, was ich in meinem vorherigen Kommentar gesagt habe, gültig ist. Warum erklären Sie mir nicht, warum Ihre ursprüngliche Antwort die Fragen gelöst hat, und vielleicht kann ich überzeugt werden, dass ich falsch liege / den falschen Standpunkt habe. In Bezug auf die Ablehnung – ich bin mir ziemlich sicher, dass eine Antwort, die die Frage nicht beantwortet, die Grundlage für eine Ablehnung ist. Vor allem bin ich von mir selbst enttäuscht, dass ich zulasse, dass dies meine Zeit in Anspruch nimmt, wenn ich nicht davon profitieren werde. Ich bin nur ein Mensch, nehme ich an.

    – Dan.

    21. Dezember 2017 um 18:15 Uhr

Um die genaue Seite, auf der Sie sich befinden, im Bereich Mein Konto zu erkennen (um Ihnen zu ermöglichen, festzustellen, welche Vorlage verwendet wird), bietet Woocommerce meiner Meinung nach keine Möglichkeit.

Ich denke, Sie müssen die aktuelle URL mit Vanilla PHP abrufen und mit der URL der Seite vergleichen, die als Dashboard/Mein Konto-Startseite festgelegt ist.

z.B

$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() Die bedingte Funktion gibt für ALLE Unterseiten von „Mein Konto“ „true“ zurück und kann daher nicht verwendet werden, um festzustellen, ob Sie sich speziell auf der Seite „Dashboard“ befinden.

  • Das funktioniert super. Nicht sicher, warum dies nicht die Antwort ist.

    – karloserfolg

    26. April 2021 um 9:08 Uhr

Ich hatte die gleiche Frage (Jahre später, lol). Für Leute, die sich die Antwort ansehen und sich fragen, warum es nicht hilfreich ist, gibt es in WooCommerce Funktionen zur Endpunkterkennung, die genau das tun, wonach Sie suchen. Sie können die Liste der verfügbaren Funktionen lesen hier.

Dies stammt direkt aus den Woocommerce-Dokumenten. Ich kopiere es nur für den Fall, dass der Link in Zukunft unterbrochen wird

is_account_page() => Gibt true auf den Kontoseiten des Kunden zurück.

is_wc_endpoint_url() => Gibt „true“ zurück, wenn ein beliebiger WooCommerce-Endpunkt angezeigt wird

is_wc_endpoint_url( ‘order-pay’ ) => Wenn die Endpunktseite für die Bestellzahlung angezeigt wird.

is_wc_endpoint_url( ‘order-received’ ) => Wenn die Endpunktseite für den Bestelleingang angezeigt wird.

is_wc_endpoint_url( ‘view-order’ ) => Wenn die Endpunktseite für die Ansichtsreihenfolge angezeigt wird.

is_wc_endpoint_url( ‘edit-account’ ) => Wenn die Endpunktseite zum Bearbeiten des Kontos angezeigt wird.

is_wc_endpoint_url( ‘edit-address’ ) => Wenn die Endpunktseite zum Bearbeiten der Adresse angezeigt wird.

is_wc_endpoint_url( ‘lost-password’ ) => Wenn die Endpunktseite für verlorenes Passwort angezeigt wird.

is_wc_endpoint_url( ‘customer-logout’ ) => Wenn die Endpunktseite für die Kundenabmeldung angezeigt wird.

is_wc_endpoint_url( ‘add-payment-method’ ) => Wenn die Endpunktseite zum Hinzufügen einer Zahlungsmethode angezeigt wird.

Tatsächlich habe ich diese Bedingung herausgefunden, die gut zu funktionieren scheint, um die WC-Dashboard-Seite nur mit nativem WC-Code zu erkennen:

    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()) { ?>

Angenommen, Ihre Kontoseite befindet sich unter /account/, wird Ihr Dashboard erkannt.

Wenn Sie nur tun würden is_page("account"), würde die Bedingung für alle Kontoseiten ausgelöst. Da das Dashboard jedoch nicht als WC-Endpunkt wie „View-Order“ oder „Last-Password“ betrachtet wird, reicht diese einfache Überprüfung aus.

1401450cookie-checkDashboard von WooCommerce-Seiten „Mein Konto“ erkennen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy