Création plugin Mondial Relay

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 52)
  • Auteur
    Messages
  • #558448

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Bonjour,
    J’ ai créé un plugin Pour Mondial Relay, tous fonctionne correctement cependant il me reste une fonction qui me donne du fil à retordre, je suis sur que c’est tout bête mais bon…
    Je dois récupérer mon custom field pour le remplacer par l’adresse de livraison dans le backoffice et l’e-mail.
    Je fais ça :

    if ( get_post_meta( $post_id, ‘_field_mondial_relay’,true ) )  {
    add_filter( ‘woocommerce_order_formatted_shipping_address’ , woo_custom_order_formatted_shipping_address’,10,2 );
    	
    	function woo_custom_order_formatted_shipping_address($address, $wc_order) {
    	$address = array(
    				‘first_name’ 	=> get_post_meta( $wc_order->id, ‘_field_mondial_relay’, true ),
    			);
    			return $address;
    }}

    Si je retire la condition if ça marche très bien mais toute les commandes qui ne sont pas Mondial relay non pas leur adresse de livraison par defaut.
    Je voudrai exécuter cette fonction si mon custom field n’est pas vide.

    Merci à toutes personnes qui pourra éclairer ma lanterne.

    #1037726

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Oup’s il manque une ‘ mais elle est dans mon code

    #1037727

    mathieu9512
    Participant
    Maître WordPress
    1084 contributions

    essayez quelque chose comme le code suivant

    pour le « if » dans mon code je me suis inspiré de ce que vous avez mis dans le 1er message mais je ne sais pas si c’est correct
    pour vérifier, je vous conseille d’afficher le contenu de $adress avant et après le « if » et vous verrez si le contenu est comme vous le souhaitez

    id, ‘_field_mondial_relay’, true );
    	
    	if («  » !== $_field_mondial_relay) {
    		$address[« first_name »] = $_field_mondial_relay;
    	}
    	
    	
    	return $address;
    	
    },10, 2);

    #1037728

    Lumiere de Lune
    Participant
    Maître WordPress
    19611 contributions

    if (!empty( get machin ) )

    !empty() est le moyen le plus sûr de tester qu’il y a des données.

    #1037729

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Bonjour,
    Mathieu9512, alors la chapeau ! j’ai juste fait copier /coller et bingo ça fonctionne à merveille 👏 ! Il me reste plus qu’à fignoler mais c’est génial.

    PHP c’est comme le tiercé dans le désordre ça marche pas. Mon code était presque bon.

    Lumière de Lune, J’avais essayé d’afficher $address avant et après, mais rien ne s’affichait parce que je le mettais en dehors de la fonction et je ne savais pas comment coupler le filtre avec la fonction.
    Pour vous donner une idée je faisait ça :

    global $woocommerce, $post, $wc_order; 
    
    $machin = get_post_meta( $wc_order->id, ‘_field_mondial_relay’, true );
    
    if (!empty()$machin ) )  { 
    
    add_filter( ‘woocommerce_order_formatted_shipping_address’ , woo_custom_order_formatted_shipping_address’,10,2 );
        
        function woo_custom_order_formatted_shipping_address($address, $wc_order) {
       
    echo $machin;
    
        $address = array(
                    ‘first_name’     => get_post_meta( $wc_order->id, ‘_field_mondial_relay’, true ),             );             return $address;
    
    echo $machin ;
    
     }}

    Mais $machin n’avait pas de valeur et je pense savoir pourquoi.
    Dans  » function woo_custom_order_formatted_shipping_address($address, $wc_order)  » il il y a $address, $wc_order qui permet de récupérer la valeur « get_post_meta( $wc_order->id, ‘_field_mondial_relay’, true ) »
    La vrai question pour moi maintenant c’est pourquoi « global $woocommerce, $post, $wc_order; $machin = get_post_meta( $wc_order->id, ‘_field_mondial_relay’, true ); » ne récupère pas la valeur.?

    Je souhaiterai approfondir et améliorer mes connaissances mais pas facile de trouver où apprendre tous ça !?
    Merci beaucoup !

    #1037730

    luciole135
    Participant
    Maître WordPress
    13739 contributions

    Vous avez mal parenthésé le test, sur votre code empty() n’a pas d’argument qui lui sont fournis :

    if (!empty()$machin ) )

    Il faut tester si $machin est vide, donc $machin est un argument de la fonction empty() !

    if (!empty($machin))

    #1037731

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Effectivement Luciole ! dans mon exemple je me suis trompé mais cependant même avec les paranthèses celà ne fonctionnait pas.
    Merci

    #1037732

    mathieu9512
    Participant
    Maître WordPress
    1084 contributions

    le code qui commence par « global $woocommerce, $post, $wc_order;  » est dans un fichier de l’extension et ce fichier est chargé au début de chaque page à un moment où ces variables n’existent pas
    par contre au moment du filtre « woocommerce_order_formatted_shipping_address » ces variables existent avec le contenu prévu donc la fonction appelée par le filtre peut travailler avec ces données

    en résumé le code des extensions ne contient que des appels à « add_action » et « add_filter » pour mettre en attente des traitements qui se feront au courant de la page, si les crochets et les filtres correspondants sont appelés

    #1037733

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    C’est donc pour ça que ton code fonctionne tu as mis la fonction dans le add_filter !?
    Enfin je me comprend, ton code ma super bien éclairé et ton explication m’a bien confirmé ce que je pensait.
    Merci Beaucoup !!!

    #1037734

    espoontintin
    Participant
    Maître WordPress
    802 contributions

    yaurait moyen de profiter de ton plugin ?
    merci

    #1037735

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Tu en as besoin pour toi ? Je me tâte à le mettre sur WordPress car il faut faire un minimum de support et j’ai peut de temps pour ça?

    #1037736

    espoontintin
    Participant
    Maître WordPress
    802 contributions

    J’ai deux site qui fonctionnent avec livraisons.
    Et perso j’aime bien Mondial Relay pour la facilité à livrer où on veut, et pour moins cher

    #1037737

    Mickael062
    Membre
    Initié WordPress
    34 contributions

    Espoontintin lit tes MP

    #1571461

    julie
    Participant
    Initié WordPress
    2 contributions

    Bonjour Mickael062!

    Finalement, as tu mis ton plugin MR sur WordPress? Je recherche désespérément ce type de plugin … !

    Belle journée!

    #1572097

    Rocou
    Participant
    Padawan WordPress
    98 contributions

    Il existe déjà un plugin Mondial Relay qui est très bien fait,  fonctionne très bien et avec un très bon support:

    https://www.mondialrelay-woocommerce.com

    Il souffre de deux gros défauts :

    1- il est très cher

    2- il est automatiquement invalidé à chaque version de woocommerce. Ce qui fait que si vous avez des commandes avant la mise à jour du plugin, les livraisons sont gratuites… Quand la licence expire, le plugin ne fonctionne plus si vous faite une MAJ de woocommerce…

    Si vous êtes prêt à payer, il est excellent. Je m’en suis servi longtemps mais j’avais quand même l’impression d’être une vache à lait malgré la qualité de l’outil.

    Sinon, il y a le plugin envoimoinscher qui gère Mondial Relay, Relais Colis, et toute une tripotée de transporteurs. C’est celui que j’utilise aujourd’hui et j’en suis très content.

    Il est gratuit, le SAV est au top, une seule facture de transport par mois, c’est génial.

15 sujets de 1 à 15 (sur un total de 52)
  • Vous devez être connecté pour répondre à ce sujet.