Schließen Sie Produkte aus einer Produktkategorie auf einer bestimmten Seite im Entrada-Design aus
Lesezeit: 8 Minuten
Merkucio
Ich möchte alle Produkte/Touren aus der Woocommerce-Kategorie „Ausflüge“ (Slug „excursions-ru“) auf der Seite „Unsere Touren“ (Slug „our-tours-ru“) ausschließen. Hier ist diese Seite
ich fand diese Lösung hier Also verwende ich diesen Code unten, aber es funktioniert nicht für mich.
Kann nicht finden, wo mein Fehler ist.
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
$new_terms = array();
// if a product category and on the shop page
// to hide from shop page, replace is_page('YOUR_PAGE_SLUG') with is_shop()
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_page('our-tours-ru') ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->slug, array( 'excursions-ru' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
So schwierige Frage?
– Merkucio
3. August 2018 um 6:38 Uhr
Hallo, die Funktion, die Sie verwenden, dient anderen Zwecken. Diese Funktion dient zum Ausblenden / Entfernen von Kategorien von der Shop-Seite, nicht von Produkten.
– Yogesh Garg
16. August 2018 um 9:19 Uhr
LoicTheAztec
Aktualisierung 1(siehe unten)
Das get_terms Filterhaken dient nicht zum Filtern von Produktenalso nicht bequem in Ihrem Fall.
Woocommerce verfügt über 3 dedizierte Hooks, um Anpassungen an der Produktabfrage vorzunehmen (Produkte filtern):
woocommerce_product_query(Actionhaken)
woocommerce_product_query_meta_query(Filterhaken)
woocommerce_product_query_tax_query(Filterhaken)
Wir werden das letzte verwenden, da es das beste für Ihren Fall ist.
Um dies nun nur für eine bestimmte Seite zu aktivieren, verwenden wir WordPress is_page() bedingtes Tag:
add_filter( 'woocommerce_product_query_tax_query', 'custom_exclude_products', 50, 2 );
function custom_exclude_products( $tax_query, $query ) {
// Only on a specific page
if( is_page('our-tours-ru') ){
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array('excursions-ru'),
'operator' => 'NOT IN'
);
}
return $tax_query;
}
Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.
Aktualisieren:
Da dies auf einer Seite ist, Sie verwenden sicherlich Woocommerce-Shortcodes um Produkte auf dieser bestimmten Seite anzuzeigen.
In diesem Fall gibt es also einen speziellen Hook für Woocommerce-Shortcodes:
Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert… Es sollte auch für Sie funktionieren.
Sie müssen sicher sein, dass diese Produkte auf einem angezeigt werden WordPress-SEITE, der Slug ist ‘our-tours-ru’denn wenn nicht, wird keine Antwort für Sie funktionieren.
Letzte Möglichkeit, die in fast allen Fällen funktioniert, verwenden pre_get_posts Filter:
Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt.
Danke dir, aber bei mir funktioniert es nicht. In der function.php des Kindes hinzugefügt. Wenige Male getestet.
– Merkucio
19. August 2018 um 6:49 Uhr
@Merkucio Ich habe meiner Antwort ein Update hinzugefügt… Es ist wirklich kompliziert, Ihnen zu helfen, da wir nicht wissen, ob es sich wirklich auf einer Seite befindet, und wir nicht wissen, wie Sie die Produkte auf dieser Seite anzeigen. Ich habe meinen Code getestet und eine Seite erstellt, die Slug ist our-tours-ruErstellen einer Produktkategorie, die Slug ist excursions-ru und das Zuweisen zu einigen Produkten, die ich mit meinem Code ausschließen wollte… Dann mit dem Shortcode [products], es funktioniert und Produkte ausschließen excursions-ru Produktkategorie. Versuchen Sie, Ihre Antwort mit weiteren Details zu aktualisieren, um eine funktionierende Antwort auf Ihre Frage zu erhalten.
– LoicTheAztec
19. August 2018 um 10:19 Uhr
Ich denke, es hängt vom Entrada-Thema ab. In diesem Thema werden zu viele Anpassungen vorgenommen, sodass normale Hooks und Methoden anstelle anderer Themen nicht funktionieren. Aber die Methode von Sally CJ funktioniert. Wie auch immer, danke für deine Hilfe.
– Merkucio
20. August 2018 um 12:24 Uhr
Ich verwende kein Entrada-Theme. Sie haben es in Ihrer Frage nicht einmal erwähnt … Ich habe das im Titel hinzugefügt. Mein Code funktioniert hauptsächlich auf anderen Themen.
– LoicTheAztec
20. August 2018 um 12:25 Uhr
Kann dies so angepasst werden, dass es basierend auf einer Div-ID anstelle des Seitennamens ausgeführt wird?
– Nikolaus Panarelli
2. März um 16:36 Uhr
(Da keine der vorhandenen Antworten für Sie funktioniert und Sie ein untergeordnetes Thema verwenden, habe ich diese Antwort gepostet, die spezifisch für das ist Entrada-Thema die Sie derzeit verwenden deine Seite.)
Die Seite “Unsere Touren”, wie ich es sehen konnte, verwendet die “Auflistung in voller Breite (dreispaltiges Raster)“-Vorlage, in der es sich im übergeordneten Design befindet entrada/entrada_templates/listing-full-width-3column-grid.phpund wer diese verwendet Vorlagenteil: entrada/template-parts/grid-threecolumn.php.
Wenn Sie es öffnen, sehen Sie dies benutzerdefinierte Abfrage:
die für die verwendet wird primär Produktbereich/Raster auf der Seite “Unsere Touren”.
Eine einfache (und wahrscheinlich funktionierende) Möglichkeit, die Kategorie „Ausflüge“ von dieser Abfrage auszuschließen oder Produkte aus dieser Kategorie auszuschließen, ist das Kopieren entrada/template-parts/grid-threecolumn.php in den Child-Theme-Ordner (z entrada-child-picpic-v1_0/template-parts/grid-threecolumn.php) und passen Sie dann die an $args Array, wie Sie möchten. Und für Ihre Frage versuchen Sie, dies vor / über dem hinzuzufügen $loop = new WP_Query( $args );:
wp_reset_query(); // Just in case.
if ( is_page( 'our-tours-ru' ) ) {
if ( ! isset( $args['tax_query'] ) ) {
$args['tax_query'] = array();
}
// Excludes products from the "Excursions" category.
$args['tax_query'][] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'excursions-ru' ),
'operator' => 'NOT IN',
);
}
Notiz: Das ist dasselbe tax_query in den anderen Antworten verwendet, mit Ausnahme der obigen speziell für die listing-full-width-3column-grid.php Vorlage (oder andere Seitenvorlagen, die die grid-threecolumn.phpVorlagenteil).
Hallo @Merkucio, danke, dass du meine Antwort angenommen hast. =) Sie können eine weitere Seite wie folgt hinzufügen: is_page( array( 'out-tours-ru', 'slug', 'slug' ) ) wobei “slug” der Seiten-Slug ist, und ebenso für die Kategorie: array( 'excursions-ru‘slug’, ‘slug’ )` wobei “slug” der Begriff/die Kategorie slug ist.
– Sally CJ
20. August 2018 um 14:24 Uhr
Ich meine, danke für das Kopfgeld. Und entschuldigen Sie die Codeformatierung – es sollte sein array( 'excursions-ru, 'slug', 'slug' ). Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen. 🙂
– Sally CJ
20. August 2018 um 14:33 Uhr
Es sollte sein is_page( array( 'our-tours-ru', 'our-tours' ) ) und nicht is_page( 'out-tours-ru', 'our-tours' ). Versuchen Sie es nochmal? Stellen Sie sicher, dass Sie die verwenden array() und überprüfen Sie die Rechtschreibung.. wie our und nicht out.. 🙂
– Sally CJ
20. August 2018 um 22:43 Uhr
Für die Kategorie 'terms' => array( 'excursions-ru', 'excursions' ),. Nochmals Entschuldigung für die Tippfehler, insbesondere die 'excursions-ru (dh ich habe die Schließung vergessen ').
– Sally CJ
20. August 2018 um 22:49 Uhr
Lassen Sie uns diese Diskussion im Chat fortsetzen.
Danke für deine Antwort. Und wo ist hier die Seite „our-tours-ru“? Ich habe Ihren Code in der function.php des Child-Themes hinzugefügt. Es funktioniert nicht.
– Merkucio
19. August 2018 um 6:55 Uhr
Um die bestimmte Kategorie von einer bestimmten Seite zu entfernen, übergeben Sie bitte die Seiten-ID anstelle von YOUR_PAGE_ID und fügen Sie den folgenden Code in Ihre aktuellen Themen ein Funktionen.php Datei.
add_filter( 'get_terms', 'exclude_category_from_specific_page', 10, 3 );
function exclude_category_from_specific_page( $terms, $taxonomies, $args ) {
$new_terms = array();
// if a product category and on a page
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_page('YOUR_PAGE_ID')) {
foreach ( $terms as $key => $term ) {
// Enter the name of the category you want to exclude
if ( ! in_array( $term->slug, array( 'excursions-ru' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
Um ein Produkt aus einer bestimmten Kategorie zu entfernen, verwenden Sie den folgenden Code
/** * Dieser Code sollte zur functions.php Ihres Themes hinzugefügt werden **/
So schwierige Frage?
– Merkucio
3. August 2018 um 6:38 Uhr
Hallo, die Funktion, die Sie verwenden, dient anderen Zwecken. Diese Funktion dient zum Ausblenden / Entfernen von Kategorien von der Shop-Seite, nicht von Produkten.
– Yogesh Garg
16. August 2018 um 9:19 Uhr