Erstens können Sie das Ziel, das Sie mit dem in Ihrer Frage gezeigten Code beschrieben haben, nicht sofort erreichen. Um zu verstehen, warum es mit diesem Code keinen direkten Ansatz gibt, müssen Sie sich ansehen, was Sie verwenden - woocommerce_related_products()
- um das zu tun, was Sie bisher getan haben.
Zweitens müssen Sie verstehen, weil Sie sonst keine Frage stellen können, die unbedingt Ihr Ziel sein sollte, um sicherzustellen, dass Sie eine Antwort erhalten. Außerdem müssen Sie bedenken, dass Wordpress Development seinen Hauptbereich auf Wordpress Core-bezogene Fragen legt. Wenn Sie interessiert sind, wird dies auf Wordpress Development Meta diskutiert. Ein spezielles Thema ist " Unser Problem und die Zukunft der Plattform-Plugins bei WPSE" . Wenn Sie also Fragen zu Plugins, wie zum Beispiel Woocommerce, stellen, sollten Sie diese so aufteilen, dass sie sich auf die Kernfunktionen beziehen, wie dies möglich ist - siehe nächster Punkt -, da Sie nicht erwarten können, dass die Leute jedes Detail jedes Plugins kennen benutze.
Drittens , lassen Sie uns nun einen tieferen Einblick in die Geschehnisse bekommen. Wie Sie sagten, verwenden Sie woocommerce_related_products()
jetzt. Wenn Sie sich die Quelle ansehen, sehen Sie, dass diese Funktion woocommerce_get_template()
zum Abrufen der related.php
Vorlage verwendet wird. woocommerce_get_template()
wird erneut verwendet woocommerce_locate_template()
, um die Vorlage zu lokalisieren. Letzteres erfolgt mithilfe der WordPress-Kernfunktion locate_template()
.
Jetzt gibt es eine Verbindung zurück zum Kern, was zu der Erkenntnis führt, dass die oben erwähnten und hoffentlich überprüften Woocommerce-Funktionen im Wesentlichen Wrapper sind, um die Kernfunktionalität zu erweitern. Eine andere Sache, die bei der Analyse der Funktionsabhängigkeiten deutlich wurde, ist, dass Sie, wie ich bereits sagte, einen anderen Ansatz benötigen, um Ihr Ziel zu erreichen, da dieser woocommerce_related_products()
- jetzt unbestreitbar offensichtlich - nicht der richtige ist.
Wenn Sie mir mit meinen Erklärungen gefolgt sind und bis jetzt gründlich gelesen haben, haben Sie gemerkt, dass das related.php
enthält, wonach Sie suchen. Ich spreche insbesondere von der get_related()
Funktion, die den woocommerce_product_related_posts
Hook enthält und die Kernfunktionen verwendet, wp_get_post_terms()
und get_posts()
- get_related()
wird verwendet, um eine Reihe von IDs zu erhalten. Zusätzlich gibt das ist woocommerce_related_products_args
Haken, die verwendet werden können , die Argumente der verwandten Produkte Abfrage nach innen zu verändern related.php
, WP_Query
wird hierfür verwendet. Die Abfrage verwendet die resultierenden IDs aus dem get_related()
Aufruf.
Ich denke, Sie haben jetzt alles zur Hand, um Ihr Problem zu lösen. Dies gibt einen fast vollständigen Überblick darüber, wie die verwandten Produkte angepasst werden können. Ich erwähnte nicht jede Funktionalität - Funktion und / oder Haken - aus dem überprüften Quellcode, aber definitiv alle wichtigen. Es sollte nun klarer werden, wie die Funktionalität der verwandten Produkte von woocommerce auf die Kernfunktionen von WordPress zurückgeführt werden kann.
Viertens komme ich zu dem Punkt , an dem Sie Ihre Anpassungen vornehmen und was Sie hätten verlangen sollen. Zum Beispiel so:
Woocommerce hat den woocommerce_product_related_posts
Haken, den get_posts()
Aufruf anzupassen , um verwandte Produkte zu bestimmen.
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
)
)
) ) );
Wie kann ich dies anpassen, um mein Ziel zu erreichen? Welches verwandte Produkte anzeigen soll, die derselben Produktkategorie angehören - product_cat
- und dieselben Tags haben - product_tag
- wie das einzelne gezeigte Produkt.
Ohne eine abschließende Antwort zu geben - zumindest nicht, wenn Sie erwartet hatten, einen vollständigen und vorgefertigten Code zu erhalten -, sollten Sie wahrscheinlich zuerst den tax_query
Parameter relation
von OR
auf ändern AND
.
Anmerkungen:
- Ich machte dies zu einer längeren beschreibenden Antwort im Hinblick auf die oben verlinkte laufende Diskussion
- Ich hoffe es macht Ihnen nichts aus, dass es nicht nur eine Antwort auf Ihre Frage ist, sondern zusätzlich einen allgemeinen pädagogischen Zweck verfolgt
- Dies ist ungetestet , da kein eigentlicher fertiger Code vorhanden ist
- last but not least ist absehbar, dass mit der Veröffentlichung von woocoomerce 2.1 einige bedeutende Codeänderungen implementiert werden, bedenkt man jedoch, dass der obige Code ab 2.0.19 derzeit gültig ist
Bearbeiten:
Sie sollten Kernklassen wirklich nicht direkt bearbeiten (Plugin). Dies ist problematisch, da Sie Ihre Änderungen bei Aktualisierungen erneut beibehalten müssen, da die Kerndateien aktualisiert und überschrieben werden, wenn Sie eine Aktualisierung durchführen. Vor allem, wenn es wie in diesem Fall leicht zu vermeiden ist, macht der folgende Code, was Sie beabsichtigt haben, und implementiert diese Änderung über Ihren 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;
}
Für WooCommerce ab Version 2.1.0 funktioniert der obige Hook nicht mehr, da er nicht mehr existiert. Die Antwort ist also erst ab Version 2.0.20 verwendbar. @NathanPowell entdeckte jedoch eine nette Antwort auf StackOverflow bezüglich der ab v2.1.0 verfügbaren und für die Anpassung der verwandten Produkte verwendbaren Hakensätze .
OR
zuAND
meinerwp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.php
Datei und wird bald diese innerhalb der getan werden ändernfunctions.php
Datei. Danke nochmal.functions.php
Machen wir uns nichts vor, Jungs. Die akzeptierte Antwort brachte den Benutzer nur zu seinem Ziel.
Das allererste Problem liegt hier:
Eine Aktion wird entfernt und dann in die EXAKTE Position gebracht, aus der sie entfernt wurde. Das Ziel ist völlig unklar.
Ich bin bei einer Suche nach verwandten Produkten darauf gestoßen, weil ich nicht verstanden habe, dass TAGS und KATEGORIEN die
woocommerce_output_related_products
Funktion in diesem Plugin steuern .Die beste Antwort auf DIESE Frage ist der folgende Link und hat alles mit dem
woocommerce_output_related_products_args()
Filter zu tun : /programming/23554993/output-posts-relating-the-tagsquelle