Como verificar se o produto está em uma determinada categoria em um único produto.PHP no WooCommerce?
-
-
Pode serporque suaprimeira declaraçãoestáperdendo umfechamento ') `?Deve ser "if (is_product_category ('áudio'))`Might be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
Boapegada,masnão éisso.is_produto_categorynãoparecefuncionarem um únicoproduto.phpGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 respostas
- votos
-
- 2012-12-18
Eunão acho que
get_categories ()
é amelhor opçãopara você,nesse caso,porqueele retorna uma string comtodas as categorias listadas comotags âncoras,multaparaexibir,masnão ótimoparaimaginarno código quais são as categorias. OK,então aprimeira coisa que vocêprecisafazer épegar o objeto/postagempara apágina atual,se você aindanãotem:postglobal $;
Então vocêpode obter objetos determos de categoria deproduto (as categorias)para oproduto. Aquiestougirando os objetos determos de categoriaem umamatriz simplesnomeada
.Categorias
porisso émaisfácil ver quais lesmas são atribuídas. Observe queisso retornará todas as categorias atribuídas aoproduto,não apenas apágina atual,ou seja,seestivermosem/Loja/Áudio/Funzo/
:$ Termos=WP_GET_POST_TERMS ($post-egt;id,'product_cat'); foreach ($ TERES como $ aprazo) $ Categorias []=$ Term- > Slug;
Então sótemos que verificar se uma categoriaestána lista:
se (in_array ('áudio',categorias $)) {//fazer algo
colocandotudojuntos:
& lt;?php postagemglobal; $ Termos=WP_GET_POST_TERMS ($post-e gt;id,'product_cat'); foreach ($ TERES como $ aprazo) $ Categorias []=$ Term- > Slug; if (in_array ('áudio',$ categorias)) { eco 'em áudio'; woocommerce_get_template_part («conteúdo»,«produto único»); }elseif (In_Array ('Elektro',Categorias $)) { Echo 'in Elektro'; woocommerce_get_template_part («conteúdo»,«produto único»); } outro { Echo 'Alguns Blabla'; }
Espero queisso seja o que vocêestavaprocurandoe responde à suapergunta.
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
devefuncionarneste caso: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'; }
-
Supermaneira simplese eficaz defazerisso.Eu acho queisso émelhor resposta.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
Eupreferiaissoporqueera curto.Noentantoeufiz 'se {coisa;retorno;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Vale apenanotar que vocêpodepassarpor uma lista de opções chamando umamatrizem vez deter que desordenar seu código commuitas verificações deelseif,assumindo que você desejafazer amesma coisa com cada categoria que é.
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;
-
Acho queesta resposta deve ser adicionada,comoedition,para a resposta de Milo.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
Isto é antigo,mas apenasno caso de aspessoas aindaestaremparecendo o WOOTHEMES como uma solução simples:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
* altere 'your_category'para o que vocêestiver usando.
Aquiestá o linkpara a documentação: https://docs.woathemes.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
Eu olhariapara usar o
get_categories()
função da classe WC_Product.Vocêpodeencontrar o linkpara a documentação aqui .
.Basicamente dentro do loop dapágina Chame afunçãopara retornar as categorias associadas aoproduto.
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.
-
Eunão sou capaz de codificarisso.Eunãotenho umapista de comofazerissofuncionar.Alguémporfavorilustreisso.Eutentei omeumelhor láem cima.Devo substituirissoporget_categories ()?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 Afunçãois_product_category () retornatrue seestivernapágina da categoria deproduto.Não é a categoria doproduto.Euestouindoem umprojeto agora,mas voutentarte dar umtrecho de códigomaistarde.@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
-
Obrigado,Stevenportertempopara codificarestepequenotrecho.Apreciemuito.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
Comonomundoposso verificar se umprodutoestáem uma determinada categoria deprodutosno single-product.php
?is_product_category ('slug') nãotem umefeitono single-product.php .Eu queroter os limites superiores.Qualquer soluçãoparaissoem uma únicapágina deproduto?