Cum să adaugi un nou endpoint în WooCommerce

1 sept. 2015, 20:02:10
Vizualizări: 19K
Voturi: 7

Folosesc WooCommerce pentru un site unde clientul vinde software. Una dintre opțiunile pe care trebuie să le adaug este un buton pentru cerere licență pe pagina de cont.

Deja am funcția care face asta într-un fișier request-license.php în folderul woocommerce din tema mea, dar am probleme cu adăugarea unui nou endpoint.

captură pagină cont WooCommerce

Când dai click pe vizualizare, endpointul apelează fișierul view-order.php, așa că vreau să apelez request-license când se dă click pe butonul de cerere licență.

Iată cum este apelat:

<?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' => __( 'Plătește', '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' => __( 'Anulează', 'woocommerce' )
        );
    }

    $actions['license'] = array(
        'url'  => $order->get_request_license_url(),
        'name' => __( 'Cerere Licență', 'woocommerce' )
    );

    $actions['view'] = array(
        'url'  => $order->get_view_order_url(),
        'name' => __( 'Vizualizează', '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>';
        }
    }
?>

Știu că trebuie să creez funcția get_request_license_url() dar nu sunt sigur cum să o implementez. Sper să primesc ajutor aici.

1
Comentarii

Puteți obține răspunsul dumneavoastră de la acest link. https://github.com/woocommerce/woocommerce/wiki/Customising-%22My-Account%22-tabs

vijay vijay
22 feb. 2017 14:29:44
Toate răspunsurile la întrebare 1
1

Se pare că WooCommerce nu are niciun filtru atunci când își înregistrează endpoint-urile, https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-query.php#L84

așa că trebuie să adăugați noul endpoint pe hook-uri de init, exact așa:

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

Apoi trebuie să faceți niște filtrare pe wc_get_template pentru a încărca fișierele dumneavoastră când cererea se potrivește cu endpoint-ul

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['licenta'])){
            $located = get_template_directory() . '/calea-catre-fisierul-tau.php';
        }
    }

    return $located;
}

Deci, când vizitați pagina de cont cu endpoint-ul licenta, de exemplu http://domeniultau.ro/my-account/licenta/, aceasta va afișa codul dumneavoastră personalizat

11 dec. 2015 15:20:51
Comentarii

Nu sunt sigur de la ce versiune, dar WooCommerce are un filtru pentru modificarea variabilelor de interogare: https://github.com/woocommerce/woocommerce/blob/master/includes/class-wc-query.php#L195

Marian Marian
8 mai 2019 10:38:37