Consultar entradas relacionadas en un tipo de entrada personalizada por una taxonomía personalizada

6 dic 2012, 07:06:06
Vistas: 22.7K
Votos: 4

Estoy tratando de mostrar entradas relacionadas mediante una taxonomía personalizada y solo tengo la solución para entradas relacionadas usando una categoría.

    $orig_post = $post;
    global $post;
    $categories = get_the_category($post->ID);
    if ($categories) {
    $category_ids = array();
    foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;

    $args=array(
    'category__in' => $category_ids,
    'post__not_in' => array($post->ID),
    'posts_per_page'=> 4, // Número de entradas relacionadas que se mostrarán.
    'caller_get_posts'=>1
    ); 

    $my_query = new wp_query($args);  
    if( $my_query->have_posts() ) {  
    echo '<div id="relatedposts" class="clearfix"><h4>Entradas Relacionadas</h4><ul>';  
    while ($my_query->have_posts()) {  
    $my_query->the_post();  
    ?>  

    <?php  
    if ( has_post_thumbnail() ) { ?>  
    <li><div class="relatedthumb"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
    <?php echo the_post_thumbnail(); ?></a>
    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><div class="title"><?php the_title(); ?></div></a>
    </div>
    </li> 
    <?php }  
    ?>  

<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query();

El código siguiente solo funciona para tipos de entrada con categorías registradas, no para tipos de taxonomías personalizadas.

2
Comentarios

No sé si está relacionado, pero parece que el argumento caller_get_posts está obsoleto: http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Cyclonecode Cyclonecode
6 dic 2012 20:59:10

Publicar preguntas con respuestas propias que describen una solución a un problema o inconveniente es genial, ¡así que gracias por eso! Desafortunadamente, es difícil entender exactamente cuál es el problema o inconveniente que se está resolviendo en tu pregunta. ¿Podrías reescribir tu pregunta para describir mejor el problema/inconveniente?

Chip Bennett Chip Bennett
7 dic 2012 03:25:43
Todas las respuestas a la pregunta 1
1
11

Ahora encontré el código que permite usar una taxonomía personalizada para mostrar publicaciones relacionadas para un tipo de contenido personalizado.

  1. $terms = get_the_terms( $post->ID , 'product_tags', 'string'); es la taxonomía personalizada donde debes consultar todas las etiquetas en tu tipo de contenido personalizado
  2. 'post_type' => 'products' es el tipo de contenido personalizado que llama todas las etiquetas personalizadas creadas en la taxonomía personalizada, que en este caso es product_tags

Inserta este código en cualquier parte dentro de tu loop o consulta para mostrar todas las publicaciones dentro de tu tipo de contenido personalizado. Esto no filtra tu tipo de contenido personalizado basado en diferentes etiquetas. Muestra todas las etiquetas dentro de tu tipo de contenido personalizado, que en este caso es "products".

//Obtener array de términos
$terms = get_the_terms( $post->ID , 'product_tags', 'string');
//Extraer los IDs para obtener un array de IDs
$term_ids = wp_list_pluck($terms,'term_id');

//Consultar publicaciones con tax_query. Elige 'IN' si quieres consultar publicaciones con cualquiera de los términos
//Elige 'AND' si quieres consultar publicaciones con todos los términos
  $second_query = new WP_Query( array(
      'post_type' => 'products',
      'tax_query' => array(
                    array(
                        'taxonomy' => 'product_tags',
                        'field' => 'id',
                        'terms' => $term_ids,
                        'operator'=> 'IN' //O 'AND' o 'NOT IN'
                     )),
      'posts_per_page' => 3,
      'ignore_sticky_posts' => 1,
      'orderby' => 'rand',
      'post__not_in'=>array($post->ID)
   ) );

//Recorrer las publicaciones y mostrarlas...
    if($second_query->have_posts()) {
     while ($second_query->have_posts() ) : $second_query->the_post(); ?>
      <div class="single_related">
           <?php if (has_post_thumbnail()) { ?>
            <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"> <?php the_post_thumbnail( 'related_sm', array('alt' => get_the_title()) ); ?> </a>
            <?php } else { ?>
                 <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
            <?php } ?>
       </div>
   <?php endwhile; wp_reset_query();
   }

Este código ayuda a resolver el problema de usar tipos de contenido personalizados para filtrar en una taxonomía personalizada. Por ejemplo, yo tenía "project" como mi taxonomía para tipo de contenido personalizado. Cuando añado diferentes etiquetas a cada proyecto, crean una taxonomía tagportfolio que agrega todas las taxonomías y las consulta.

7 dic 2012 03:19:25
Comentarios

Increíble, casi me salvas la vida, muchas gracias por la solución super fácil.

Jodyshop Jodyshop
17 sept 2021 02:30:00