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.
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
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é