Necesito meter publi distinta en la barra lateral de los posts según categoría. Al estar fuera del Loop no me funciona el uso normal de in_category
He probado varias cosas y ninguna me funciona. Añadir que el tema lleva varias opciones de sidebars y widgets y estoy trabajando en un child-theme
En functions.php he copiado esta función del codex:
Código PHP:
Ver original
/** * Tests if any of a post's assigned categories are descendants of target categories * * @param int|array $cats The target categories. Integer ID or array of integer IDs * @param int|object $_post The post. Omit to test the current post in the Loop or main query * @return bool True if at least 1 of the post's categories is a descendant of any of the target categories * @see get_term_by() You can get a category by name or slug, then pass ID to this function * @uses get_term_children() Passes $cats * @uses in_category() Passes $_post (can be empty) * @version 2.7 * @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category */ function post_is_in_descendant_category( $cats, $_post = null ) { // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category' ); if ( $descendants && in_category( $descendants, $_post ) ) return true; } return false; } } ?>
Y en el widget (donde puedo escribir PHP) lo siguiente:
Código PHP:
Ver original
<?php if (in_category( 'Textil' ) || post_is_in_descendant_category( 6 ) ) { echo 'aqui anuncio solo textil en texto'; } ?>
Lo que obtengo de esta forma es el anuncio en la página de categoría "Textil" pero no en los posts de esa categoría.
Es decir obtengo exactamente lo mismo que se obtiene usando if (is_category( 'textil' )) sin necesidad de crear ninguna función extra en functions.php
Sé que modificando el tema desde cero podría reorganizar tranquilamente todas las sidebars y meter el condicional en la plantilla single.php sin el menor problema, pero no es el caso, en principio preferiría adaptarme a lo que hay porque es una plantilla compleja y va preparada para muchas diferentes vistas de páginas y categorías, con un montón de widgets y funciones y varias sidebars por vista.
¿Alguien sabría decirme qué es lo que falla en ese código o si conoce alguna forma más simple de conseguir lo que busco?
También es posible que me haya atascado en alguna tontería, ya que con estos calores y el tiempo que llevo probando alternativas se me hayan derretido las neuronas