web-dev-qa-db-fra.com

Comment ajouter un nouveau point de terminaison dans woocommerce

J'utilise woocommerce pour un site Web et où le client vend des logiciels. Une des options que je dois ajouter est de demander un bouton de licence sur la page de mon compte.

J'ai déjà la fonction qui fait cela dans un fichier request-license.php dans le dossier woocommerce de mon thème mais j'ai des problèmes pour ajouter un nouveau point.

 enter image description here 

lorsque vous cliquez sur Afficher, le fichier view-order.php appelle les points de terminaison et je souhaite donc appeler request-license lorsque vous cliquez sur le bouton de demande de licence.

voici comment s'appelle

 <?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>';
        }
    }
?>

Je sais que je dois créer la fonction get_request_license_url () mais je ne sais pas comment l'implémenter. J'espère avoir de l'aide ici

7
user3344329

semble que woocommerce n'a aucun filtre lors de l'enregistrement de leurs points de terminaison, https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-query.php#L84

vous devez donc ajouter votre nouveau point de terminaison sur les hooks init, comme ceci

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

vous devez ensuite filtrer sur wc_get_template pour appeler vos fichiers lorsque la requête correspond à votre noeud final

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;
}

aussi, lorsque vous visitez ma page de compte avec un point final license, disons http://yourdomain.com/my-account/license/, cela affichera votre code personnalisé

6
Lafif Astahdziq