Voici une astuce WooCommerce pour changer la façon dont sont affichés les produits similaires de votre boutique.
Par défaut, je ne sais pas comment sont choisis les produits similaires, mais mon client voulait contrôler la fonctionnalité soit en utilisant des balises, soit par catégorie.
Pour cela, nous allons rajouter une fonction. Nous allons voir comment le faire, étape par étape :
Modifier le fichier functions.php
Sur mon thème de enfant, j’ai ajouté une nouvelle fonction :
[pastacode manual= »%3C%3Fphp%0D%0A%0D%0A%2F%2FNew%20%22Related%20Products%22%20function%20for%20WooCommerce%0D%0Afunction%20get_related_custom(%20%24id%2C%20%24limit%20%3D%205%20)%20%7B%0D%0A%20%20%20%20global%20%24woocommerce%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20Related%20products%20are%20found%20from%20category%20and%20tag%0D%0A%20%20%20%20%24tags_array%20%3D%20array(0)%3B%0D%0A%20%20%20%20%24cats_array%20%3D%20array(0)%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20Get%20tags%0D%0A%20%20%20%20%2F%2F%24terms%20%3D%20wp_get_post_terms(%24id%2C%20’product_tag’)%3B%0D%0A%20%20%20%20%2F%2Fforeach%20(%20%24terms%20as%20%24term%20)%20%24tags_array%5B%5D%20%3D%20%24term-%3Eterm_id%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20or%20Get%20categories%0D%0A%20%20%20%20%24terms%20%3D%20wp_get_post_terms(%24id%2C%20’product_cat’)%3B%0D%0A%20%20%20%20foreach%20(%20%24terms%20as%20%24term%20)%20%24cats_array%5B%5D%20%3D%20%24term-%3Eterm_id%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20Don’t%20bother%20if%20none%20are%20set%0D%0A%20%20%20%20if%20(%20sizeof(%24cats_array)%3D%3D1%20%26%26%20sizeof(%24tags_array)%3D%3D1%20)%20return%20array()%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20Meta%20query%0D%0A%20%20%20%20%24meta_query%20%3D%20array()%3B%0D%0A%20%20%20%20%24meta_query%5B%5D%20%3D%20%24woocommerce-%3Equery-%3Evisibility_meta_query()%3B%0D%0A%20%20%20%20%24meta_query%5B%5D%20%3D%20%24woocommerce-%3Equery-%3Estock_status_meta_query()%3B%0D%0A%0D%0A%20%20%20%20%2F%2F%20Get%20the%20posts%0D%0A%20%20%20%20%24related_posts%20%3D%20get_posts(%20apply_filters(‘woocommerce_product_related_posts’%2C%20array(%0D%0A%20%20%20%20%20%20%20%20’orderby’%20%20%20%20%20%20%20%20%3D%3E%20’rand’%2C%0D%0A%20%20%20%20%20%20%20%20’posts_per_page’%20%3D%3E%20%24limit%2C%0D%0A%20%20%20%20%20%20%20%20’post_type’%20%20%20%20%20%20%3D%3E%20’product’%2C%0D%0A%20%20%20%20%20%20%20%20’fields’%20%20%20%20%20%20%20%20%20%3D%3E%20’ids’%2C%0D%0A%20%20%20%20%20%20%20%20’meta_query’%20%20%20%20%20%3D%3E%20%24meta_query%2C%0D%0A%20%20%20%20%20%20%20%20’tax_query’%20%20%20%20%20%20%3D%3E%20array(%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20’relation’%20%20%20%20%20%20%3D%3E%20’OR’%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20array(%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’taxonomy’%20%20%20%20%20%3D%3E%20’product_cat’%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’field’%20%20%20%20%20%20%20%20%3D%3E%20’id’%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’terms’%20%20%20%20%20%20%20%20%3D%3E%20%24cats_array%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20array(%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’taxonomy’%20%20%20%20%20%3D%3E%20’product_tag’%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’field’%20%20%20%20%20%20%20%20%3D%3E%20’id’%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20’terms’%20%20%20%20%20%20%20%20%3D%3E%20%24tags_array%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0D%0A%20%20%20%20%20%20%20%20)%0D%0A%20%20%20%20)%20)%20)%3B%0D%0A%20%20%20%20%24related_posts%20%3D%20array_diff(%20%24related_posts%2C%20array(%20%24id%20))%3B%0D%0A%20%20%20%20return%20%24related_posts%3B%0D%0A%7D%0D%0Aadd_action(‘init’%2C’get_related_custom’)%3B%0D%0A%3F%3E » provider= »manual » lang= »php »/]
Copie du fichier related.php
Après cela, je copie le fichier related.php (du thème > WooCommerce > single-product > related.php) dans le dossier de mon thème enfant.
Changer l’appel de la fonction
Dans le fichier related.php j’ai modifier la ligne :
[pastacode manual= »%24related%20%3D%20%24product-%3Eget_related(%203%20)%3B » provider= »manual » lang= »php »/]
En ceci :
[pastacode manual= »%24related%20%3D%20get_related_custom(%24product-%3Eid%2C%203)%3B » provider= »manual » lang= »php »/]
Et voilà, cela devrait fonctionner.
Vous pouvez modifier la fonction si vous souhaitez plutôt que les produits liés au mots clés ou bien les deux…
Merci à FELIPE PAVÃO pour cette astuce.
A bientôt
Commentaires