COTHURNES: Code pour FUNCTION.PHP

Lors de l’achat d’un produit particulier, le USER ->

  • se voit attribuer le rôle ‘editor’
  • est redirigé vers sa page author
  • se voit attribuer une valeur pour un champs meta particulier
  • la commande du produit passe automatiquement de ‘En cours’ à ‘Terminée’

Voilà le code pour 2 produits (221 et 224) et le champs meta ‘roleducompte’

<?php
/**
 * Plugin Name: VPGredirectplgin
 * Version: 1.0
 * Description: Redirect and update user meta fields after woocommerce purchase | Based on specific product ID. Veuillez modifier directement dans le code du plugin les ID produits, les URL de redirection, le nom du champs à modifier et leur valeur.
 * Author: VPG 
 * Author URI: https://vpgaillard.fr
 */




 /**
    * adapted from "LoicTheAztec" at
    * https://wordpress.stackexchange.com/questions/336411/woocommerce-redirect-thankyou-page-based-on-product-id-doesnt-empty-cart
  */


  /* partie 01 */
  /* fonction de redirection et modification */

  add_action( 'template_redirect', 'custom_order_received_redirect' );
function custom_order_received_redirect(){
    // Only on order received (thankyou) page for a valid Order ID
    if( is_wc_endpoint_url('order-received')
        && ( $order_id = absint( get_query_var('order-received') ) )
        && get_post_type($order_id) === 'shop_order'
        && isset( $_GET['key'] ) ) {

        // Empty cart
        if ( ! WC()->cart->is_empty() ) {
            WC()->cart->empty_cart();
        }

        // Get an instance of the WC_Order Object
        $order = wc_get_order( $order_id );

	// Get the current user ID (nécessaire pour updater le champs user meta)
	$user_id = $order->get_user_id();
	
 
	// pour le changement de role, on crée la variable user
	$user = new WP_User( $user_id );



        // Check that the order key is valid
        if( is_a($order, 'WC_Order') && $order->get_order_key() === esc_attr($_GET['key']) ) {

            // HERE define your products IDs in the array POUR LES TEST EN DUR
		 $product_ids1 = array(221);
		 $product_ids2 = array(224);
		

            // HERE define your redirection URL (with the order ID as argument if needed) POUR LES TEST EN DUR

	$redirection_url1 = home_url("/?author=" . $user_id . "/");
	$redirection_url2 = home_url("/?author=" . $user_id . "/");
	

            // Loop through order items
            foreach( $order->get_items() as $item ) {
                if( in_array( $item->get_product_id(), $product_ids1 ) ) {
		
   		//attribution de valeur dans le champs meta   
              update_user_meta( $user_id, 'roleducompte', 'artistes' );

           // valide command:
             $order->update_status( 'completed' );

           //attribution du rôle:               
             $user->set_role('editor');
            
           //redirection vers l'url choisie
                    wp_redirect( $redirection_url1 );
                    exit();
                }

                if( in_array( $item->get_product_id(), $product_ids2 ) ) {

		    //attribution de valeur dans le champs meta   
              update_user_meta( $user_id, 'roleducompte', 'organisateur' );

           // valide command:
             $order->update_status( 'completed' );

           //attribution du rôle:               
             $user->set_role('editor');
            
           //redirection vers l'url choisie
                    wp_redirect( $redirection_url2 );
                    exit();
                }

              
            }
        }
    }
}


/* fin de la fonction de redirection */