Wie kann ich überprüfen, ob sich das Produkt in einer bestimmten Kategorie auf einer single-product.php in Woocommerce befindet?
-
-
Könnte sein,dass Ihrerersten Aussageein abschließendes `)`fehlt?Es sollte "if (is_product_category ('audio'))" seinMight be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
Guter Fang,aber dasistesnicht.is_product_category scheint auf single-product.phpnicht zufunktionierenGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 Antworten
- Stimmen
-
- 2012-12-18
Ich denkenicht,dass
get_categories()
in diesem Fall diebeste Optionfür Sieist,daeseine Zeichenfolgemit allen Kategorien zurückgibt,die als Ankertags aufgeführt sind,gut zum Anzeigen,abernichtgut zum Abbildenim Code,was die Kategorien sind. Ok,alserstesmüssen Sie das Produkt-/Post-Objektfür die aktuelle Seite abrufen,falls Sieesnochnicht haben:global $post;
Anschließend können Sie die Termobjekte der Produktkategorie (die Kategorien)für das Produkt abrufen. Hier verwandleich die Kategoriebegriffsobjektein eineinfaches Arraymit dem Namen
$categories
,damit Sie leichtererkennen können,welche Slugs zugewiesen sind. Beachten Sie,dass dadurch alle Kategorien zurückgegeben werden,die dem Produkt zugewiesen sind,nichtnur die der aktuellen Seite,dh wenn wir uns unter/shop/audio/funzo/
befinden:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Dannmüssen wirnurnochprüfen,obeine Kategoriein der Listeenthaltenist:
if ( in_array( 'audio', $categories ) ) { // do something
Alles zusammenfügen:
<?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 danachgesucht und Ihre Fragebeantwortet.
I don't think
get_categories()
is the best option for you in this case because it returns a string with all the categories listed as anchor tags, fine for displaying, but not great for figuring out in code what the categories are. Ok, so the first thing you need to do is grab the product/post object for the current page if you don't already have it:global $post;
Then you can get the product category term objects (the categories) for the product. Here I'm turning the category term objects into a simple array named
$categories
so it's easier to see what slugs are assigned. Note that this will return all categories assigned to the product, not just the one of the current page, ie if we're on/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Then we just have to check whether a category is in the list:
if ( in_array( 'audio', $categories ) ) { // do something
Putting it all together:
<?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'; }
Hopefully this is what you were looking for and answers your question.
-
- 2012-12-18
has_term
solltein diesem Fallfunktionieren: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'; }
has_term
should work in this case: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'; }
-
Supereinfache undeffektive Möglichkeit,dies zutun.Ich denke,dasisteine bessere Antwort.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
Ich habe das vorgezogen,weiles kurz war.Ich habejedoch `if {thing;return;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Esisterwähnenswert,dass Sieeine Liste von Optionen durch Aufrufeneines Arrays durchgehen können,anstatt Ihren Codemit vielen anderen Überprüfungen überladen zumüssen,vorausgesetzt,Siemöchtenmit jeder Kategorie dasselbetun.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
It's worth noting that you can go through a list of options by calling an array rather than having to clutter up your code with lots of elseif checks, assuming you want to do the same thing with each category that is.
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 Bearbeitung zu Milos Antwort hinzugefügt werden.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
Diesist alt,abernurfür den Fall,dass die Leute WooThemesimmernoch alseinfache Lösungbetrachten:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
* Ändern Sie 'Ihre_Kategorie'in das,was Sie verwenden.
Hierist der Link zur Dokumentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
This is old but just in case people are still looking WooThemes as a simple solution:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*Change 'your_category' to whatever you are using.
Here is the link to the documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
-
- 2012-12-12
Ich würde versuchen,die Funktion
get_categories()
der WC_Product-Klasse zu verwenden.Den Link zur Dokumentation finden Sie hier .
Grundsätzlich rufen Sieinnerhalb der Schleife der Seite die Funktion auf,um die dem Produkt zugeordneten Kategorien zurückzugeben.
I'd look at using the
get_categories()
function of the WC_Product class.You can find the link to the documentation here.
Basically within the loop of the page call the function to return the categories associated with the product.
-
Ich kann dasnicht codieren.Ich habe keine Ahnung,wieich das zum Laufenbringen kann.Jemandbitte illustrieren Sie dies.Ich habe dort obenmein Bestes versucht.Sollteich dies durchget_categories ()ersetzen?I am not able to code this. I don't have a clue how to get this to work. Somebody please illustrate this. I tried my best up there. Should I replace this with get_categories()?
- 0
- 2012-12-13
- Alex
-
@Alex Die Funktionis_product_category ()gibt TRUE zurück,wenn Sie sich auf der Produktkategorieseitebefinden.Nicht die Kategorie des Produkts.Ichbin gerademit einem Projektbeschäftigt,aberich werde später versuchen,Ihneneinen Code-Ausschnitt zubesorgen.@Alex the is_product_category() function returns TRUE if you're on the product category page. Not the category of the product. I'm heads down on a project right now, but I'll try to get you a code snippet later.
- 0
- 2012-12-13
- Steve
-
Danke,Steven,dass du dir die Zeitgenommen hast,diesen kleinen Ausschnitt zu codieren.Schätzen Siees sehr.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
Wiein aller Welt kannich überprüfen,ob sichein Produktin einerbestimmten Produktkategoriein der single-product.php befindet?
is_product_category ('slug') hat keine Auswirkungen auf die single-product.php .Ichmöchte die oberen Bedingungen haben.Gibteseine Lösung dafür aufeinereinzelnen Produktseite?