So fügen Sie einen neuen Endpunkt im Woocommerce hinzu


7

Ich benutze Woocommerce für eine Website und wo der Kunde Software verkauft. Eine der Optionen, die ich hinzufügen muss, ist das Anfordern einer Lizenzschaltfläche auf meiner Kontoseite.

Ich habe bereits die Funktion, die dies in einer Datei request-license.php im woocommerce-Ordner in meinem Design ausführt, aber ich habe Probleme, einen neuen Punkt hinzuzufügen.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie auf Ansicht klicken, ruft der Endpunkt die Datei view-order.php auf, sodass ich die Anforderungslizenz aufrufen möchte, wenn auf die Schaltfläche Anforderungslizenz geklickt wird.

hier ist wie heißt

 <?php
    $actions = array();

    if ( in_array( $order->get_status(), apply_filters( 'woocommerce_valid_order_statuses_for_payment', array( 'pending', 'failed' ), $order ) ) ) {
            $actions['pay'] = array(
            'url'  => $order->get_checkout_payment_url(),
            'name' => __( 'Pay', 'woocommerce' )
        );
    }

    if ( in_array( $order->get_status(), apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( 'pending', 'failed' ), $order ) ) ) {
        $actions['cancel'] = array(
            'url'  => $order->get_cancel_order_url( wc_get_page_permalink( 'myaccount' ) ),
            'name' => __( 'Cancel', 'woocommerce' )
        );
    }

    $actions['license'] = array(
        'url'  => $order->get_request_license_url(),
        'name' => __( 'Request License', 'woocommerce' )
    );

    $actions['view'] = array(
        'url'  => $order->get_view_order_url(),
        'name' => __( 'View', 'woocommerce' )
    );

    $actions = apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order );

    if ( $actions ) {
        foreach ( $actions as $key => $action ) {
            echo '<a href="' . esc_url( $action['url'] ) . '" class="button ' . sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) . '</a>';
        }
    }
?>

Ich weiß, dass ich die Funktion get_request_license_url () erstellen muss, bin mir aber nicht sicher, wie ich sie implementieren soll. Ich hoffe, ich kann hier etwas Hilfe haben


Sie können Ihre Antwort über diesen Link erhalten. github.com/woocommerce/woocommerce/wiki/…
Vijay

Antworten:


6

Woocommerce hat anscheinend keine Filter bei der Registrierung seiner Endpunkte, https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-query.php#L84

Sie müssen also Ihren neuen Endpunkt einfach so an den Init-Hooks hinzufügen

add_action( 'init', 'add_endpoint' );
function add_endpoint(){
    add_rewrite_endpoint( 'license', EP_ROOT | EP_PAGES );
}

Dann müssen Sie etwas filtern wc_get_template, um Ihre Dateien aufzurufen, wenn die Anforderung mit Ihrem Endpunkt übereinstimmt

add_filter( 'wc_get_template', 'custom_endpoint', 10, 5 );
function custom_endpoint($located, $template_name, $args, $template_path, $default_path){

    if( $template_name == 'myaccount/my-account.php' ){
        global $wp_query;
        if(isset($wp_query->query['license'])){
            $located = get_template_directory() . '/your-path-to-file.php';
        }
    }

    return $located;
}

so , wenn Sie meine Kontoseite mit Endpunkt besuchen license, lassen Sie sagen http://yourdomain.com/my-account/license/, dass Ihre benutzerdefinierten Code angezeigt werden


Ich bin mir seit der Version nicht sicher, aber WooCommerce hat einen Filter zum Ändern der Abfragevariablen: github.com/woocommerce/woocommerce/blob/master/includes/…
Marian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.