Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

in_category fuera del Loop (en sidebar)

Estas en el tema de in_category fuera del Loop (en sidebar) en el foro de WordPress en Foros del Web. Hola a todos, a ver si me podeis ayudar: Necesito meter publi distinta en la barra lateral de los posts según categoría. Al estar fuera ...
  #1 (permalink)  
Antiguo 26/08/2013, 12:31
Avatar de zanguanga
Moderadora
 
Fecha de Ingreso: julio-2009
Ubicación: España
Mensajes: 1.686
Antigüedad: 14 años, 8 meses
Puntos: 429
in_category fuera del Loop (en sidebar)

Hola a todos, a ver si me podeis ayudar:

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
  1. /**
  2.  * Tests if any of a post's assigned categories are descendants of target categories
  3.  *
  4.  * @param int|array $cats The target categories. Integer ID or array of integer IDs
  5.  * @param int|object $_post The post. Omit to test the current post in the Loop or main query
  6.  * @return bool True if at least 1 of the post's categories is a descendant of any of the target categories
  7.  * @see get_term_by() You can get a category by name or slug, then pass ID to this function
  8.  * @uses get_term_children() Passes $cats
  9.  * @uses in_category() Passes $_post (can be empty)
  10.  * @version 2.7
  11.  * @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category
  12.  */
  13. if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
  14.     function post_is_in_descendant_category( $cats, $_post = null ) {
  15.         foreach ( (array) $cats as $cat ) {
  16.             // get_term_children() accepts integer ID only
  17.             $descendants = get_term_children( (int) $cat, 'category' );
  18.             if ( $descendants && in_category( $descendants, $_post ) )
  19.                 return true;
  20.         }
  21.         return false;
  22.     }
  23. }
  24.  
  25. ?>

Y en el widget (donde puedo escribir PHP) lo siguiente:

Código PHP:
Ver original
  1. <?php if (in_category( 'Textil' ) || post_is_in_descendant_category( 6 ) ) {
  2.       echo 'aqui anuncio solo textil en texto';
  3. }
  4. ?>

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
__________________
Mi blog personal | Mi G+
  #2 (permalink)  
Antiguo 27/08/2013, 21:06
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años
Puntos: 1146
Respuesta: in_category fuera del Loop (en sidebar)

Lo he probado con éxito, funciona perfectamente en wordpress 3.5 y 3.6

Lo que me hace preguntar (algo tonto) la ID de Textil es -> 6 ???

Dices que el código PHP para mostrar el resultado lo metes atravez de un plugin... cual es? tal vez sea problema de tu plugin, el código funciona perfectamente desde el theme.
  #3 (permalink)  
Antiguo 28/08/2013, 18:48
Avatar de zanguanga
Moderadora
 
Fecha de Ingreso: julio-2009
Ubicación: España
Mensajes: 1.686
Antigüedad: 14 años, 8 meses
Puntos: 429
Respuesta: in_category fuera del Loop (en sidebar)

Muchas gracias Arturo. Sigo igual. En efecto, también lo he probado en WordPress 3.6 y el tema Twenty Thirteen y funciona. Sin embargo en el tema donde he de integrarlo no funciona. Alguna incompatibilidad, supongo.

La ID de Textil es 6, naturalmente...

Lo he probado con código a secas y con el código de varios plugins: AdRotate y Bannerize y un par más que ahora mismo no recuerdo porque los deseché. Ambos funcionan razonablemente bien en Twenty Thirteen pero, al igual que con código hecho a mano, fallan en el tema de marras.

Bannerize da en este tema un fallo bastante creativo: en la vista de single se confunde de subcategoría cuando el post tiene la misma categoría padre pero distinta subcategoría, entonces aparece el anuncio correspondiente a otra categoría padre

El problema evidentemente está en el tema. Es un tema complejo que lleva siete barras laterales y un montón de widgets (varios de ellos con WPquerys complejas), que se combinan de diferente forma según estés en home, página de categoría o single.

Aunque no veo nada raro en las plantillas del front-end que pueda darme una pista.

Probaré desactivando todos los scripts que lleva el tema y si no funciona habrá que rehacer las siete sidebars, eliminar todos los widgets y rehacer los necesarios usando únicamente las funciones de WordPress.

Uf, es casi peor rehacer un tema ya creado que hacerlo entero de nuevo

Una pregunta más antes de seguir ¿podría estar interfiriendo algún script de la parte admin, es decir de las opciones del tema en el back-end?
__________________
Mi blog personal | Mi G+
  #4 (permalink)  
Antiguo 29/08/2013, 11:07
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años
Puntos: 1146
Respuesta: in_category fuera del Loop (en sidebar)

Hasta donde tengo entendido los scripts creados para el backend de los themes no deben afectar ni crear interferencia con las funciones nativas de wordpress.

sin embargo he revisado y a simple vista me parece que "in_category" es una función que indirectamente podría ser afectada... cosa que si lo hiciera seria una mala practica del programador y hasta cierto punto fallo del theme.

dudo que sea el caso yo pensaría en buscar por otros lados.... su pongo que el theme en cuestión es de paga y no se puede compartir para echarle un vistazo.
  #5 (permalink)  
Antiguo 02/09/2013, 15:11
edn
 
Fecha de Ingreso: junio-2011
Mensajes: 126
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: in_category fuera del Loop (en sidebar)

No se sí esto te ayude, pero yo he conseguido algo similar con un sidebar según categoría:
Código PHP:
    <?php
if (in_category(1)) {
   include(
TEMPLATEPATH."/sidebar_custom1.php");
} elseif (
in_category(123)) {
   include(
TEMPLATEPATH."/sidebar_custom2.php");
} else {
   include(
TEMPLATEPATH."/sidebar.php");
?>
  #6 (permalink)  
Antiguo 02/09/2013, 15:25
Avatar de zanguanga
Moderadora
 
Fecha de Ingreso: julio-2009
Ubicación: España
Mensajes: 1.686
Antigüedad: 14 años, 8 meses
Puntos: 429
Respuesta: in_category fuera del Loop (en sidebar)

Cita:
sin embargo he revisado y a simple vista me parece que "in_category" es una función que indirectamente podría ser afectada... cosa que si lo hiciera seria una mala practica del programador y hasta cierto punto fallo del theme.
Muchas gracias ArturoGallegos. Lo mismo opino.

Cita:
su pongo que el theme en cuestión es de paga y no se puede compartir para echarle un vistazo
Supones bien. Es un problema de bajo presupuesto + no poder ver los temas por dentro antes de elegir uno. Ya montado todo (tema complicadito de configurar) te encuentras con un fallo como ese debido a un requerimiento posterior del cliente. Y encima, en algunas grandes y archiconocidas empresas tampoco funciona el soporte técnico como debería. KK d lux

Cita:
No se sí esto te ayude
Gracias edn por el intento
__________________
Mi blog personal | Mi G+
  #7 (permalink)  
Antiguo 03/09/2013, 06:59
 
Fecha de Ingreso: julio-2008
Mensajes: 543
Antigüedad: 15 años, 7 meses
Puntos: 56
Respuesta: in_category fuera del Loop (en sidebar)

y has probado a leer cuales son esas subcategorias y meterselas a incategory en un array?

en el codex veo este ejemplo:
Código PHP:
Ver original
  1. <?php
  2. if ( in_category( 'pachyderms' )) {
  3.     // They have long trunks...
  4. } elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
  5.     // They are warm-blooded...
  6. } else {
  7.     // & c.
  8. }
  9. ?>

podria ser una opcion...
__________________
Un saludo! :-)
Quiero ser el primero
  #8 (permalink)  
Antiguo 03/09/2013, 09:35
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años
Puntos: 1146
Respuesta: in_category fuera del Loop (en sidebar)

no creo que sea la opción buscada aunque claro, es una opción y muy valida cuando seremos nosotros quienes mantengamos el sitio todo el tiempo... pero no es una opción viable si tenemos que decirle al cliente que tiene que hacer eso cada que agrega algo.
  #9 (permalink)  
Antiguo 03/09/2013, 10:11
elmajaron
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: in_category fuera del Loop (en sidebar)

Has probado este plugin? WP Page Widget un saludo.
  #10 (permalink)  
Antiguo 04/09/2013, 00:47
 
Fecha de Ingreso: julio-2008
Mensajes: 543
Antigüedad: 15 años, 7 meses
Puntos: 56
Respuesta: in_category fuera del Loop (en sidebar)

Cita:
Iniciado por ArturoGallegos Ver Mensaje
no creo que sea la opción buscada aunque claro, es una opción y muy valida cuando seremos nosotros quienes mantengamos el sitio todo el tiempo... pero no es una opción viable si tenemos que decirle al cliente que tiene que hacer eso cada que agrega algo.
ya, preo creo que con get_categories http://codex.wordpress.org/Function_...get_categories se podria capturar todas las categorias hijas de una categoria padre.

Código PHP:
Ver original
  1. <?php $args = array(
  2.     'type'                     => 'post',
  3.     'child_of'                 => 0,
  4.     'parent'                   => '',
  5.     'orderby'                  => 'name',
  6.     'order'                    => 'ASC',
  7.     'hide_empty'               => 1,
  8.     'hierarchical'             => 1,
  9.     'exclude'                  => '',
  10.     'include'                  => '',
  11.     'number'                   => '',
  12.     'taxonomy'                 => 'category',
  13.     'pad_counts'               => false );?>

donde dice 'child_of' => 0, se cambia el 0 por el id de la categoria, la funcion devuelve un array, es cosa que coger los dato que se necesiten y arreando
__________________
Un saludo! :-)
Quiero ser el primero
  #11 (permalink)  
Antiguo 04/09/2013, 01:17
Avatar de zanguanga
Moderadora
 
Fecha de Ingreso: julio-2009
Ubicación: España
Mensajes: 1.686
Antigüedad: 14 años, 8 meses
Puntos: 429
Respuesta: in_category fuera del Loop (en sidebar)

Gracias darchy, aunque tiene razón ArturoGallegos, no es una opción, el problema es que hay algo en el tema que impide que funcionen correctamente algunos códigos de WordPress. Lo chequearé bien y lo reportaré para que lo tengan en cuenta en futuras actualizaciones.

elmajaron, gracias, me adivinaste el pensamiento, voy a probar con una par de plugins como ese, Custom sidebar entre ellos, a ver si por casualidad suena la flauta
__________________
Mi blog personal | Mi G+

Etiquetas: fuera, loop, página, php, post, tema, theme
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:13.