Premièrement , vous ne pouvez pas atteindre immédiatement l'objectif que vous avez décrit avec le code que vous montrez dans votre question. Pour comprendre pourquoi il n'y a pas d'approche directe avec ce code, vous devez jeter un œil à ce que vous utilisez - woocommerce_related_products()
- pour faire ce que vous avez fait jusqu'à présent.
Deuxièmement , vous devez comprendre, car sinon vous ne pouvez pas poser une question précise, qui devrait absolument être votre objectif, pour vous assurer d'obtenir une réponse. En plus de cela, vous devez garder à l'esprit que Wordpress Development a sa portée principale définie sur les questions liées à Wordpress Core - si vous êtes intéressé, cela est en cours de discussion sur Wordpress Development Meta , un sujet spécifique étant Nos courtiser et l'avenir des plugins de plate-forme chez WPSE . Donc, si vous posez des questions sur les plugins, comme woocommerce, vous devez le décomposer pour le rendre aussi lié que possible aux fonctions de base - voir le point suivant - car vous ne pouvez pas vous attendre à ce que les gens connaissent tous les détails de chaque plugin que vous utilise.
Troisièmement , permet maintenant de mieux comprendre ce qui se passe. Comme vous l'avez dit, vous utilisez woocommerce_related_products()
maintenant. Si vous regardez la source, vous voyez que cette fonction utilise woocommerce_get_template()
pour obtenir le related.php
modèle. woocommerce_get_template()
utilise woocommerce_locate_template()
à nouveau pour localiser le modèle, ce dernier le fait en utilisant la fonction principale de wordpress locate_template()
.
Maintenant, il y a une connexion au noyau, conduisant à la réalisation que les fonctions de woocommerce mentionnées ci-dessus - et, espérons-le, inspectées - sont essentiellement des enveloppes pour étendre les fonctionnalités du noyau. Une autre chose qui est devenue claire en analysant les dépendances des fonctionnalités est, ce que j'ai dit auparavant, que vous avez besoin d'une approche différente pour atteindre votre objectif, car woocommerce_related_products()
- maintenant indéniablement évident - n'est pas la bonne.
Si vous m'avez suivi avec mes explications et que vous avez lu attentivement jusqu'à présent, vous vous êtes rendu compte que le related.php
contient ce que vous recherchez. Je parle en particulier de la get_related()
fonction, qui comprend le woocommerce_product_related_posts
crochet et utilise les fonctions de base wp_get_post_terms()
et get_posts()
- get_related()
est utilisée pour obtenir un ensemble d'identifiants. De plus, le woocommerce_related_products_args
hook, qui peut être utilisé pour modifier les arguments de la requête de produits connexes à l'intérieur related.php
, WP_Query
est utilisé pour cela. La requête utilise les identifiants résultants de l' get_related()
appel.
Je pense que vous avez tout en main pour résoudre votre problème. En fait, bien plus que cela, cela donne un aperçu presque complet sur la façon de personnaliser les produits connexes. Je n'ai pas mentionné toutes les fonctionnalités - fonctions et / ou hook-out du code source inspectées, mais certainement toutes les plus importantes. Il devrait maintenant être plus clair comment la fonctionnalité des produits connexes de woocommerce peut être retracée aux fonctions principales de wordpress.
Quatrièmement , j'arrive à, où vous devez appliquer vos personnalisations et ce que vous auriez dû demander. Par exemple, comme ceci:
Woocommerce a le woocommerce_product_related_posts
crochet pour personnaliser l' get_posts()
appel afin de déterminer les produits associés.
Code:
// Get the posts
$related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array(
'orderby' => 'rand',
'posts_per_page' => $limit,
'post_type' => 'product',
'fields' => 'ids',
'meta_query' => $meta_query,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $cats_array
),
array(
'taxonomy' => 'product_tag',
'field' => 'id',
'terms' => $tags_array
)
)
) ) );
Comment puis-je personnaliser cela pour atteindre mon objectif? C'est-à-dire pour montrer les produits connexes qui sont dans la même catégorie de produits - product_cat
- et ont la même étiquette (s) - product_tag
- que le produit unique montré.
Sans vous donner de conclusion - du moins pas si vous vous attendiez à obtenir un code complet et prêt à l'emploi -, la première chose que vous devriez probablement faire est de changer le tax_query
paramètre relation
de OR
en AND
.
Remarques:
- Je l'ai fait une réponse descriptive plus longue avec la discussion en cours liée ci-dessus à l'esprit
- J'espère que cela ne vous dérange pas, que ce n'est pas seulement une réponse à votre question, mais cherche également à remplir un objectif éducatif général
- ce n'est pas testé , car il n'y a pas de code prêt à l'emploi
- Enfin et surtout, il est prévisible qu'avec la sortie de woocoomerce 2.1, d'importants changements de code seront mis en œuvre, à cela, mais pour l'instant à partir de 2.0.19, le code ci-dessus est valide
Éditer:
Vous ne devriez vraiment pas éditer (plugin) les classes de base directement. C'est problématique, car vous devez à nouveau conserver vos modifications sur les mises à jour, car les fichiers principaux sont mis à jour et remplacés si vous en effectuez une. Surtout s'il est facilement évitable, comme dans ce cas, le code ci-dessous fait de toute façon ce que vous aviez l'intention de faire, à savoir mettre en œuvre ce changement via votre functions.php
.
Code:
add_filter( 'woocommerce_product_related_posts',
'wpse_123436_change_wc_related_products_relation_to_and' );
function wpse_123436_change_wc_related_products_relation_to_and() {
$get_related_products_args = array(
'orderby' => 'rand',
'posts_per_page' => $limit,
'post_type' => 'product',
'fields' => 'ids',
'meta_query' => $meta_query,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $cats_array
),
array(
'taxonomy' => 'product_tag',
'field' => 'id',
'terms' => $tags_array
)
)
);
return $get_related_products_args;
}
Pour WooCommerce version 2.1.0 et supérieure, le crochet ci-dessus ne fonctionnera pas, car il n'existe plus, donc la réponse est utilisable jusqu'à la version 2.0.20. Mais @NathanPowell a découvert une bonne réponse sur StackOverflow concernant le à partir de la v2.1.0 disponible et pour la personnalisation du jeu de crochets utilisable des produits associés .
OR
enAND
dans monwp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.php
fichier et je vais bientôt le faire à partir dufunctions.php
fichier. Merci encore.functions.php
Ne nous leurrons pas ici les gars. La réponse acceptée n'a fait qu'atteindre l'utilisateur.
Le tout premier problème réside ici:
Une action est supprimée, puis placée dans la position EXACTE dont elle a été supprimée. L'objectif n'est pas clair.
Je suis tombé sur cela avec une recherche sur les produits connexes parce que je ne comprenais pas que les TAGS et les CATÉGORIES sont ce qui motive la
woocommerce_output_related_products
fonction dans ce plugin.La meilleure réponse à CETTE question est le lien suivant, et a tout à voir avec le
woocommerce_output_related_products_args()
filtre: /programming/23554993/output-posts-relating-to-the-tagsla source