WooFrance Dépannage et support WordPress WooCommerce Forums Forum de Support WooCommerce sauvegarder résultats cases à cocher dans metabox sur l’admin produit

17 sujets de 1 à 17 (sur un total de 17)
  • Auteur
    Messages
  • #65748
    folly29
    Participant
    Points: 84 pts

    Bonjour,

    J’ai ajouter une métabox dans l’admin sur les page produits pour pouvoir relier des produits a une page. Pour l’instant tout fonctionne, j’affiche toutes les sous-pages qui m’intéresse, mon problème c’est pour sauvegarder le résultat quand on update la page. Pouvez vous m’aider ? Merci d’avance. Voici mon code si dessous.

    add_action( ‘add_meta_boxes’, ‘add_custom_box’ ); function add_custom_box( $post ) { add_meta_box(“demo-meta-box”, “Artistes”, “people_meta_box”, “product”, “side”, “high”, null); } function people_meta_box($object) { wp_nonce_field( ‘my_awesome_nonce’, ‘awesome_nonce’ ); $checkboxMeta = get_post_meta( $post>ID ); ?> <?php $children = get_pages(‘child_of=’.$post>ID); if(ICL_LANGUAGE_CODE==‘fr’): $parent_id = 16; //fr elseif(ICL_LANGUAGE_CODE==‘en’): $parent_id = 75; //en endif; if( count( $children ) != 0 ) : ?> <div class=list-sub-pages> <?php $mypages = get_pages( array( ‘child_of’ => $parent_id, ‘sort_column’ => ‘post_date’, ‘sort_order’ => ‘desc’ )); foreach( $mypages as $page ) { ?> <div class=sub-pages> <?php $checkbox_value = get_post_meta($object>ID, “meta-box-checkbox”, true); ?> <input type=checkbox name=artiste-<?php echo $page>ID ?> id=artiste-<?php echo $page>ID ?> value=yes <?php if ( isset ( $checkbox_value[‘artiste-‘.$page>ID] ) ) checked( $checkbox_value[‘artiste-‘.$page>ID][0], ‘yes’ ); ?> /> <label for=artiste-<?php echo $page>ID ?>><?php echo $page>post_title; ?></label> </div> <br/> <?php } // end for each ?> </div><!– list sub pages –> <?php endif; ?> <?php }

    depanagewp
    #65749
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    pour la partie “$checkbox_value = get_post_meta…” vous pouvez le sortir avant la boucle foreach puisque la valeur ne change pas à chaque passage dans la boucle.
    et pour les attributs name vous pouvez mettre quelque chose comme name="meta-box-checkbox[artiste-...]" comme ça vous aurez dans $_POST le tableau tout prêt à enregistrer.

    ensuite pour l’enregistrement, vous pouvez le faire sur cette action :
    https://developer.wordpress.org/reference/hooks/save_post_post-post_type/

    donc le code donnera quelque chose dans ce genre :

    add_action("save_post_page", function ($post_ID, \WP_Post $page, $update) {
       
        if (!$update) {
           
            // valeurs par défaut pour une nouvelle page
           
            update_post_meta($page->ID, "meta-box-checkbox", []);
           
            return;
        }
       
       
        // vérification du nonce
       
        if (!isset($_POST["my_awesome_nonce"])) {
            return;
        }
       
        check_admin_referer("my_awesome_nonce", "awesome_nonce");
       
       
        // enregistrement des cases à cocher
        //...
       
       
       
    });

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #65792
    folly29
    Participant
    Points: 84 pts

    Merci Mathieu pour ton aide, je vais tester ça.

    depanagewp
    #72020
    folly29
    Participant
    Points: 84 pts

    Salut Mathieu,

    J’ai testé ce que tu m’a envoyé mais je n’arrive pas a le faire fonctionner, je suis débutant en php, il y a un truc que j’ai pas du bien comprendre.

    depanagewp
    #72051
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    Montre nous le code que tu as essayé.
    Le forum n’arrive pas à présenter le code s’il y a des balises HTML donc colle le dans ce service :
    https://framabin.org/

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #72098
    folly29
    Participant
    Points: 84 pts

    Salut Mathieu, merci pour ta réactivité.

    J’ai enfin réussi a faire la sauvegarde 🙂

    Voici le code :

    https://framabin.org/p/?d53faf76d8121626#FAN8auBHCE0uduDeiPY4X6fVGcW4FRlYDTyVQ4qYPGk=

    Par contre maintenant que j’ai sauvegardé les infos, j’aimerais pouvoir afficher les produits qui sont lié a la page directement sur la page concernait.

    Exemple : J’ai un produit “Nirvana : Nevermind” et une page artiste “nirvana”, grâce au développement ci dessus j’aimerais afficher le produit “Nirvana : Nevermind” sur la page “Nirvana”. J’espère que je suis assez clair. En tout cas, merci beaucoup pour ton aide.

    depanagewp
    #72150
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    est ce que sur la page produit, tu as besoin d’afficher la liste des pages artistes ?

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #72188
    folly29
    Participant
    Points: 84 pts

    Non seulement un lien vers la page de l’artiste qui a été coché dans l’admin.

    depanagewp
    #72234
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    donc la réponse à ma question est “oui” 😉 tu as besoin d’afficher la liaison entre le produit en cours et les pages artistes cochées.
    je demandais cela par rapport au choix de l’édition de cette liaison.

    donc maintenant sur la page de l’artiste, l’idée pour afficher les produits liés est de parcourir tous les produits et de tester pour chacun s’il est lié à la page en cours.

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #72385
    folly29
    Participant
    Points: 84 pts

    Merci Mathieu pour ta réponse,

    J’arrive bien a afficher touts les produits sur la page artistes avec le code suivant : https://framabin.org/p/?d0b57f76556f4420#qR0wR2vbVxSdbQMcKB+xXUjThHnn7yh1cfIyL05t3r8=

    Par contre je ne vois pas comment faire la liaison.

    Merci d’avance.

    depanagewp
    #72729
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    le test dans la boucle while peut se faire comme cela :
    https://framabin.org/p/?c678c1752e41961f#N9ASdlCzaIydL/dqwVf17OPNyZ53erPDDQ0Ltbie1WQ=

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #73169
    folly29
    Participant
    Points: 84 pts

    Merci pour ton aide précieuse, je vais tester cela.

    depanagewp
    #75841
    folly29
    Participant
    Points: 84 pts

    Salut Mathieu,

    J’ai encore un soucis avec l’affichages des produits. Je n’arrive pas a les afficher sur la version anglaise. Sur la version Francaise ca fonctionne parfaitement. Le seul probleme c’est que si aucun produit n’est relier j’aimerais afficher un texte précisant que aucun produit n’est présent dans cette catégorie.

    Je suis vraiment perdu et je ne vois pas du tout comment faire. Si tu pouvais m’aider ca serait vraiment sympa.

    Voici mon code : https://framabin.org/p/?59c88436e88bcd85#sdDvxPrxDhMvpzT5uURq25uIjAmIPWOigN1Kc+0r6n8=

    depanagewp
    #76010
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    si je me rappelle bien, le code qui a été ajouté permet de lier plusieurs pages WordPress à un produit WooCommerce.
    quel est la relation de cela avec la catégorie dont tu parles ? il s’agit d’une catégorie de produits WooCommerce ?

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #76062
    folly29
    Participant
    Points: 84 pts

    Salut Mathieu,

    Oui c’est une catégorie de produit. En gros j’affiche sur une page tout les articles lier a un artiste.

    Exemple :

    Page artiste “Nirvana”

    Plusieurs produit lier a la page nirvana (Bleach, Nervermind …) version CD (Catégorie) et version Vinyl (Catégorie)

    Est-ce plus clair pour toi ?

    depanagewp
    #76115
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    dans ce cas tu as déjà la condition dans le code.
    tu as if ( $wpb_all_query->have_posts() ) et donc s’il n’y a pas de produit dans la catégorie, tu peux mettre un message dans le else.

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #76154
    folly29
    Participant
    Points: 84 pts

    Le problème c’est que cette condition récupère tout les produits de la catégorie, donc il y aura toujours des produits dedans. Il me faudrait aussi la relation qui précise que cette article est lier a la page de l’artiste.

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