Ändern Sie die URL/den Endpunkt „view-order/order-id“ in WooCommerce Mein Konto – Bestellungen in „orders/order-id“

Lesezeit: 3 Minuten

Benutzer-Avatar
Benyas

Derzeit ist die URL unter dem WooCommerce-Tab „Meine Bestellungen“ für die Schaltfläche, wenn Sie eine Bestellung im Detail anzeigen, gleich /my-account/view-order/ORDER-ID/

Ich möchte diese URL ändern in /mein-konto/bestellungen/BESTELL-ID/ – So:

  • aktuelle URL: /my-account/view-order/ORDER-ID/

  • neue URL: /mein-konto/bestellungen/BESTELL-ID/


Daher habe ich über die WooCommerce-Einstellungen die Ansichtsreihenfolge Endpunkt zu Aufträge

Das funktioniert, die URL des Buttons zur Detailansicht der Bestellung wurde effektiv geändert, nur bekomme ich auf der Bestelldetailseite folgende Meldung

‘Es wurde noch keine Bestellung aufgegeben’.

Ich glaube durch den folgenden Code, der in zu finden ist /plugins/woocommerce/includes/class-wc-order.php | Linie 1675

/**
 * Generates a URL to view an order from the my account page.
 *
 * @return string
 */
public function get_view_order_url() {
    return apply_filters( 'woocommerce_get_view_order_url', wc_get_endpoint_url( 'view-order', $this->get_id(), wc_get_page_permalink( 'myaccount' ) ), $this );
}

Ich kann mein Ziel erreichen, aber ich könnte einen Rat gebrauchen. Wer kann mich anleiten?

Benutzer-Avatar
7uc1f3r

Wechseln /my-account/view-order/ORDER-ID/ URL zu /mein-konto/bestellungen/BESTELL-ID/ kann in wenigen Schritten erfolgen.


Schritt 1) Ändern Sie den Endpunkt der Ansichtsreihenfolge

Die URL für jeden Endpunkt kann in WooCommerce > Einstellungen > Erweitert im Abschnitt Seiteneinrichtung angepasst werden

Kontoendpunkte

ODER Sie verwenden die woocommerce_get_endpoint_url Filterhaken statt

function filter_woocommerce_get_endpoint_url( $url, $endpoint, $value, $permalink ) {
    // Specific endpoint
    if ( $endpoint === 'view-order' ) {
        // New URL
        $url = $permalink . 'orders/' . $value;
    }

    return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'filter_woocommerce_get_endpoint_url', 10, 4 );

Während der Endpunkt jetzt geändert wird, sehen Sie beim Anzeigen der neuen URL die folgende Meldung:

‘Es wurde noch keine Bestellung aufgegeben’.

Dies liegt daran, dass die /myaccount/orders.php Template-Datei wird geladen, dabei sollte dies die /myaccount/view-order.php Schablone


Schritt 2) Stellen Sie sicher, dass die richtige Vorlagendatei geladen ist, dies sowohl für die /mein-konto/bestellungen/ und /mein-konto/bestellungen/BESTELL-ID/ URL.

Daher müssen wir die vorhandene überschreiben woocommerce_account_orders() Funktion, die in der zu finden ist /includes/wc-template-functions.php Datei. Damit unsere benutzerdefinierte Funktion ausgeführt wird

function woocommerce_account_orders( $current_page ) {
    global $wp;

    // For view-order template file
    if ( isset( $wp->query_vars['orders'] ) && is_numeric( $wp->query_vars['orders'] ) ) {
        $order_id = $wp->query_vars['orders'];

        $order = wc_get_order( $order_id );

        if ( ! $order || ! current_user_can( 'view_order', $order_id ) ) {
            echo '<div class="woocommerce-error">' . esc_html__( 'Invalid order.', 'woocommerce' ) . ' <a href="'%20.%20esc_url(%20wc_get_page_permalink(%20'myaccount'%20)%20)%20.%20'" class="wc-forward">' . esc_html__( 'My account', 'woocommerce' ) . '</a></div>';

            return;
        }

        // Backwards compatibility.
        $status       = new stdClass();
        $status->name = wc_get_order_status_name( $order->get_status() );

        wc_get_template(
            'myaccount/view-order.php',
            array(
                'status'   => $status, // @deprecated 2.2.
                'order'    => $order,
                'order_id' => $order->get_id(),
            )
        );
    } else {
        $current_page    = empty( $current_page ) ? 1 : absint( $current_page );
        $customer_orders = wc_get_orders(
            apply_filters(
                'woocommerce_my_account_my_orders_query',
                array(
                    'customer' => get_current_user_id(),
                    'page'     => $current_page,
                    'paginate' => true,
                )
            )
        );

        wc_get_template(
            'myaccount/orders.php',
            array(
                'current_page'    => absint( $current_page ),
                'customer_orders' => $customer_orders,
                'has_orders'      => 0 < $customer_orders->total,
            )
        );
    }
}

Wichtig: Es ist nicht beabsichtigt, diese Funktion durch eine Änderung der Kerndatei zu ändern!! Sie können dies einfach hinzufügen Funktionen.phpdas liegt daran, dass diese Funktion von eingebettet ist if ( ! function_exists( 'woocommerce_account_orders' ) ) {


Schritt 3) Dieser Schritt ist optional. Dadurch wird sichergestellt, dass die /my-account/view-order/ORDER-ID/ URL (die jetzt die alte URL ist) ist nicht mehr erreichbar

function action_woocommerce_account_view_order_endpoint() {
    remove_action( 'woocommerce_account_view-order_endpoint', 'woocommerce_account_view_order' );
}
add_action( 'woocommerce_account_view-order_endpoint', 'action_woocommerce_account_view_order_endpoint', 1 );

Code aus Schritt 1, 2 und 3 geht hinein Funktionen.php Datei des aktiven Child-Themes (oder aktiven Themes).


Verwandt: Ändern Sie den benutzerdefinierten „View-Order“-Endpunkt des Titels in WooCommerce Mein Konto

1017080cookie-checkÄndern Sie die URL/den Endpunkt „view-order/order-id“ in WooCommerce Mein Konto – Bestellungen in „orders/order-id“

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

Privacy policy