web-dev-qa-db-fra.com

Comment ajouter et afficher automatiquement (ouvrir) tous les attributs du produit?

Y a-t-il un moyen, lors de l'ajout d'un nouveau produit, que tous les attributs disponibles soient automatiquement ajoutés à ce produit et ouverts/développés de sorte que, lorsque j'ajoute un nouveau produit, je n'ai pas à les ajouter au préalable, puis à cliquer sur les en-têtes pour les développer leur?

J'espère que cette image efface ce que je veux réaliser: enter image description here

Bien sûr, je peux déclencher manuellement le clic sur le bouton "Développer tout" avec jQuery, mais je ne parviens pas à trouver l’endroit où ajouter ce morceau de code jQ. La première question est toutefois plus importante pour moi. Toute action dans la bonne direction est donc grandement appréciée.

edit: J'ai réussi à résoudre le problème en ajoutant la ligne suivante:

jQuery('.expand_all').trigger("click");

dans le fichier themes/mytheme/admin/admin-functions.php de la fonction siteoptions_admin_head. Mais le premier qq reste encore. J'ai toutefois trouvé un moyen de contourner le problème - je pouvais d'abord ajouter un produit et y ajouter tous les attributs existants. Lorsque je créais de nouveaux produits, je faisais une copie de ce produit et les ajoutais/supprimais des attributs dont je n'avais pas besoin. Cela ne fonctionnerait cependant pas de manière dynamique si les attributs changeaient, ce qui ne représente donc pas une amélioration.

2
Nikola

Ce n'était pas aussi facile que je pensais au départ.

Cela montrera tous les attributs. Apparemment, par défaut, WC cache tous les attributs qui ne contiennent aucun terme. Ils sont déjà dans le code, juste avec un display:none;.

function wpa_120062_scripts(){ ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $('.woocommerce_attributes > div').removeClass('closed').show();
            $('#woocommerce_attributes a.expand_all').click();
        });

    </script>
<?php
}
add_action('admin_print_footer_scripts', 'wpa_120062_scripts');

Selon que vous envisagez ou non de cocher toutes les cases "Visible sur la page du produit", vous pouvez ajouter des données aux attributs d'une publication particulière lors de sa création. Pour certaines autres WPA questions, je me suis connecté à transition_post_status. Le statut "auto-brouillon", censément ne se déclenche que lors de la première création ... à partir de là, il passe soit à "brouillon", soit à l'un des autres statuts de publication.

function wpa_120062_new_product($new_status, $old_status, $post){
    if ( $new_status == "auto-draft" && isset( $post->post_type ) && $post->post_type == 'product' ){

        // do stuff here
            $defaults = array ( 'pa_color' => array (
                                          'name' => 'pa_color',
                                          'value' => '',
                                          'position' => 1,
                                          'is_visible' => 1,
                                          'is_variation' => 1,
                                          'is_taxonomy' => 1,
                                       ),
                                'pa_capacity' => array (
                                          'name' => 'pa_capacity',
                                          'value' => '',
                                          'position' => 2,
                                          'is_visible' => 1,
                                          'is_variation' => 1,
                                          'is_taxonomy' => 1,
                                       )
            );

        update_post_meta( $post->ID , '_product_attributes', $defaults );

   }

}
add_action('transition_post_status', 'wpa_120062_new_product', 10, 3);

pa_capacity et pa_color ne sont que quelques exemples d'attributs que j'avais déjà installés.

PS- Je suggérerais de mettre à jour wpa_120062_scripts pour ne l'afficher que sur les écrans d'édition des produits, mais je suis un peu frit par la suite.

MODIFIER

Nous pouvons utiliser la fonction woocommerce wc_get_attribute_taxonomies() pour obtenir dynamiquement tous les attributs et les parcourir en boucle:

function wpa_120062_new_product($new_status, $old_status, $post){

    if ( $new_status == "auto-draft" && isset( $post->post_type ) && $post->post_type == 'product' ){

        if( function_exists( 'wc_get_attribute_taxonomies' ) && ( $attribute_taxonomies = wc_get_attribute_taxonomies() ) ) {

            $defaults = array();

            foreach ( $attribute_taxonomies as $tax ) {

                $name = wc_attribute_taxonomy_name( $tax->attribute_name );

                // do stuff here
                $defaults[ $name ] = array (
                    'name' => $name,
                    'value' => '',
                    'position' => 1,
                    'is_visible' => 1,
                    'is_variation' => 1,
                    'is_taxonomy' => 1,
                );

            update_post_meta( $post->ID , '_product_attributes', $defaults );

            }

        }

    }

}
add_action('transition_post_status', 'wpa_120062_new_product', 10, 3);

PS- Je pense que les valeurs par défaut vont être un peu différentes dans WC2.1. Cela ne fonctionne plus vraiment de la même manière pour moi avec mes versions git de Edge.

3
helgatheviking

Mise à jour de WC 2.1:

function wpa_120062_scripts(){ ?>
<script type="text/javascript">
    jQuery(document).ready(function($) {
        $('.product_attributes > div').removeClass('closed').show();
        $('#product_attributes a.expand_all').click();
    });

</script>
0
vadims