Afficher une valeur d’un champ personnalisé pour variation

  • Statut : non résolu
8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Messages
  • #548315
    whoaloic
    Participant
    Chevalier WordPress
    101 contributions

    Bonjour,

    J’ai créer un champ personnalisé pour les variations de produit (il s’agit d’une éco participation que je souhaiterais ajouter au-dessous de chaque variation de prix).
    Voir tuto : http://www.remicorson.com/woocommerce-custom-fields-for-variations/

    P.S : ce tuto n’est pas compatible avec WooCommerce 2.3 car les valeurs des champs personnalisés ne s’affichent pas dans le backend.
    Voir le commentaire pour régler le bug : http://www.remicorson.com/woocommerce-custom-fields-for-variations/#comment-14146

    Je bloque sur l’affichage dynamique des valeurs des champs personnalisés.
    Lorsque le visiteur sélectionne une variation de produit (avec la liste déroulante), le prix et le SKU changent selon la variation choisie.
    Je souhaiterais la même chose pour mon champ personnalisé.
    J’ai bien trouvé ce tuto sur github: https://gist.github.com/kloon/4228021#comment-1177265 mais ça ne fonctionne pas.

    Toute aide serait la bienvenue.

    Cordialement.

    #999486
    mathieu9512
    Participant
    Maître WordPress
    1084 contributions
    whoaloic wrote:
    J’ai bien trouvé ce tuto sur github: https://gist.github.com/kloon/4228021#comment-1177265 mais ça ne fonctionne pas.

    qu’est ce qui ne fonctionne pas ? donnez-nous plus d’explications ou montrez-nous le site pour qu’on puisse tester

    #999487
    whoaloic
    Participant
    Chevalier WordPress
    101 contributions

    J’ai donc ajouté dans le fichier variable.php juste en dessous de :

    le code suivant.

    <div class="selected-variation-custom-field"><!-- Holds the value for the variation custom field --></div>
    ID, ‘variable_eco_participation’, true);
    
        $custom_data[$variation_id] = array(
            « variable_eco_participation » => $custom_field
        );
    	//echo $custom_field;
    endforeach;
    ?>
    
    jQuery(function($) {
        var variation_custom_fields = ,
            variations_data = JSON.parse( $(‘form.variations_form’).first().attr( ‘data-product_variations’ ) ),
            $selected_variation_custom_field = $(‘.selected-variation-custom-field’); // see DIV above
    
        $(‘table.variations’).on(‘change’, ‘select’, function() {
            var $select = $(this),
                attribute_name = $select.attr(‘name’),
                selected_value = $select.val(),
                custom_field_value = «  »;
    
            // Loop over the variations_data until we find a matching attribute value
            // We then use the variation_id to get the value from variation_custom_fields
            $.each(variations_data, function() {
                if( this.attributes[ attribute_name ] &&  this.attributes[ attribute_name ] === selected_value ) {
                    custom_field_value = variation_custom_fields[ this.variation_id ].custom_field_value;
                    return false; // break
                }
            });
    
            // doing this outside the loop above ensures that the DIV gets emptied out when it should
            $selected_variation_custom_field.text( custom_field_value );
        });
    });

    Voici un signes exterieursd’un produit !

    Quand j’analyse le code avec firebug, je vois bien que mon script récupère les valeurs des champs mais ne les affichent pas dans la div class= »selected-variation-custom-field » (d’ailleurs le commentaire dans cet div n’apparaît plus).

    #999488
    mathieu9512
    Participant
    Maître WordPress
    1084 contributions

    affiche les valeurs intermédiaires des valeurs javascript pour voir à quel endroit ça coince.
    tu peux utiliser « console.log(« blablabla »); » pour afficher une valeur dans la console

    #999489
    whoaloic
    Participant
    Chevalier WordPress
    101 contributions

    J’ai essayé « console.log(« blablabla »); » dans la console mais j’ai la réponse undefined.
    A vrai dire, je ne comprends pas l’usage de console.log !

    #999490
    whoaloic
    Participant
    Chevalier WordPress
    101 contributions

    OK j’ai ajouté console.log(« blablabla »); avant return false; // break et je vois que « blablabla » s’affiche bien dans la console quand je choisis une variation de produit.
    Je vois aussi avec firebug les différentes valeurs de mon champ personnalisé mais je ne parviens tojours pas à les afficher.

    #999491
    mathieu9512
    Participant
    Maître WordPress
    1084 contributions

    j’ai vu que tu as rajouté « alert(custom_field_value); » qui affiche « undefined »

    affiche le contenu de « variation_custom_fields[ this.variation_id ] » et tu verras mieux pourquoi la ligne custom_field_value = variation_custom_fields[ this.variation_id ].custom_field_value; ne fonctionne pas

    #999492
    whoaloic
    Participant
    Chevalier WordPress
    101 contributions

    Voici le bon code :

    ID, ‘variable_eco_participation’, true);
    
        $custom_data[$variation_id] = array(
            « custom_field_value » => $variable_eco_participation
        );
    endforeach;
    ?>
    
               <span class='eco'>dont <strong>Eco-participation : </strong> <span class="selected-variation-custom-field"><!-- Holds the value for the variation custom field --></span> €</span>
     
    
    jQuery(function($) {
        var variation_custom_fields = ,
            variations_data = JSON.parse( $(‘form.variations_form’).first().attr( ‘data-product_variations’ ) ),
            $selected_variation_custom_field = $(‘.selected-variation-custom-field’); // see DIV above
    
        $(‘table.variations’).on(‘change’, ‘select’, function() {
            var $select = $(this),
                attribute_name = $select.attr(‘name’),
                selected_value = $select.val(),
                custom_field_value = «  »;
    
            // Loop over the variations_data until we find a matching attribute value
            // We then use the variation_id to get the value from variation_custom_fields
            $.each(variations_data, function() {
                if( this.attributes[ attribute_name ] &&  this.attributes[ attribute_name ] === selected_value ) {
                    custom_field_value = variation_custom_fields[ this.variation_id ].custom_field_value;
                    return false; // break
                }
            });
    
            // doing this outside the loop above ensures that the DIV gets emptied out when it should
            $selected_variation_custom_field.text( custom_field_value );
        });
    });

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