Wie überprüfe ich, ob das Produkt in einer bestimmten Kategorie in einer single-product.php in Woocommerce enthalten ist?


25

Wie in aller Welt kann ich auf der single-product.php überprüfen, ob ein Produkt einer bestimmten Produktkategorie angehört ?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category ('slug') hat keinen Einfluss auf die single-product.php . Ich möchte die oberen Bedingungen haben. Gibt es dafür eine Lösung auf einer einzigen Produktseite?


Könnte daran liegen, dass Ihrer ersten Aussage ein Closing fehlt )? Es sollteif (is_product_category('audio'))
stealthyninja

Guter Fang, aber das ist es nicht. is_product_category scheint auf single-product.php nicht zu funktionieren
Alex

Antworten:


28

Ich denke nicht, dass get_categories()dies in diesem Fall die beste Option für Sie ist, da eine Zeichenfolge mit allen als Ankertags aufgelisteten Kategorien zurückgegeben wird, die zwar gut zum Anzeigen, aber nicht gut zum Herausfinden der Kategorien im Code geeignet ist. Ok, das erste, was Sie tun müssen, ist das Produkt / Post-Objekt für die aktuelle Seite zu greifen, wenn Sie es noch nicht haben:

global $post;

Dann können Sie die Produktkategorie-Begriffsobjekte (die Kategorien) für das Produkt erhalten. Hier verwandle ich die Kategoriebegriffsobjekte in ein einfaches Array mit dem Namen, $categoriesdamit leichter erkennbar ist, welche Slugs zugewiesen sind. Beachten Sie, dass dies alle dem Produkt zugewiesenen Kategorien zurückgibt, nicht nur die der aktuellen Seite, dh wenn wir eingeschaltet sind /shop/audio/funzo/:

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

Dann müssen wir nur noch prüfen, ob eine Kategorie in der Liste enthalten ist:

if ( in_array( 'audio', $categories ) ) {  // do something

Alles zusammenfassen:

<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

if ( in_array( 'audio', $categories ) ) {
  echo 'In audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'In elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'some blabla';
}

Hoffentlich haben Sie danach gesucht und Ihre Frage beantwortet.


37

has_term sollte in diesem Fall funktionieren:

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'In audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'In elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'some blabla';
}

Super einfache und effektive Möglichkeit, dies zu tun. Ich denke, das ist eine bessere Antwort.
Trevor

Ich habe das vorgezogen, weil es kurz war. Allerdings habe ichif { thing; return;}
Eoin

8

Es ist erwähnenswert, dass Sie eine Liste von Optionen durchgehen können, indem Sie ein Array aufrufen, anstatt Ihren Code mit vielen elseif-Überprüfungen überladen zu müssen, vorausgesetzt, Sie möchten für jede Kategorie dasselbe tun.

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;

Ich denke, diese Antwort sollte als Ergänzung zu Milos Antwort hinzugefügt werden.
Cybmeta


0

Ich würde die get_categories()Funktion der Klasse WC_Product verwenden.

Den Link zur Dokumentation finden Sie hier .

Grundsätzlich rufen Sie innerhalb der Schleife der Seite die Funktion auf, um die mit dem Produkt verknüpften Kategorien zurückzugeben.


Ich kann das nicht codieren. Ich habe keine Ahnung, wie ich das zum Laufen bringen kann. Jemand illustriert das bitte. Ich habe dort oben mein Bestes versucht. Sollte ich dies durch get_categories () ersetzen?
Alex

@Alex Die Funktion is_product_category () gibt TRUE zurück, wenn Sie sich auf der Produktkategorieseite befinden. Nicht die Kategorie des Produkts. Ich bin gerade mit einem Projekt beschäftigt, versuche aber später, Ihnen einen Codeausschnitt zu besorgen.
Steve

Danke, Steven, dass du dir die Zeit genommen hast, dieses kleine Snippet zu programmieren. Schätzen Sie es sehr.
Alex
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.