Interogare articole înrudite într-un tip de postare personalizat după o taxonomie personalizată

6 dec. 2012, 07:06:06
Vizualizări: 22.7K
Voturi: 4

Încerc să afișez articole înrudite după o taxonomie personalizată și am doar soluția pentru articolele înrudite care folosesc o categorie.

    $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, // Numărul de articole înrudite care vor fi afișate.
    'caller_get_posts'=>1
    ); 

    $my_query = new wp_query($args);  
    if( $my_query->have_posts() ) {  
    echo '<div id="relatedposts" class="clearfix"><h4>Articole Înrudite</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();

Codul de mai sus funcționează doar pentru tipurile de postări cu categorie înregistrată, nu pentru tipurile de taxonomii personalizate.

2
Comentarii

Nu știu dacă este legat, dar se pare că argumentul caller_get_posts este învechit: http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Cyclonecode Cyclonecode
6 dec. 2012 20:59:10

Postarea întrebărilor cu răspuns propriu care descriu o soluție la o problemă sau o problemă este grozavă, așa că mulțumesc pentru asta! Din păcate, este dificil de înțeles din întrebarea ta exact care este problema/problema rezolvată. Poți rescrie întrebarea pentru a descrie mai bine problema/problema?

Chip Bennett Chip Bennett
7 dec. 2012 03:25:43
Toate răspunsurile la întrebare 1
1
11

bine, acum am găsit codul care face posibilă utilizarea unei taxonomii personalizate pentru a afișa postări conexe pentru un tip de postare personalizat.

  1. $terms = get_the_terms( $post->ID , 'product_tags', 'string'); este taxonomia personalizată în care ar trebui să puneți pentru a interoga toate etichetele din tipul de postare personalizat
  2. 'post_type' => 'products' este tipul de postare personalizat care apelează toate etichetele personalizate create în taxonomia personalizată, care în acest caz este product_tags

Introduceți acest cod oriunde în bucla sau interogarea dvs. pentru a afișa toate postările din tipul de postare personalizat. Acest lucru nu filtrează tipul de postare personalizat pe baza diferitelor etichete. Acesta afișează toate etichetele din tipul de postare personalizat, care în acest caz este products.

//Obține un array de termeni
$terms = get_the_terms( $post->ID , 'product_tags', 'string');
//Extrage ID-urile pentru a obține un array de ID-uri
$term_ids = wp_list_pluck($terms,'term_id');

//Interoghează postări cu tax_query. Alegeți 'IN' dacă doriți să interogați postările cu oricare dintre termeni
//Alegeți 'AND' dacă doriți să interogați postările cu toți termenii
  $second_query = new WP_Query( array(
      'post_type' => 'products',
      'tax_query' => array(
                    array(
                        'taxonomy' => 'product_tags',
                        'field' => 'id',
                        'terms' => $term_ids,
                        'operator'=> 'IN' //Sau 'AND' sau 'NOT IN'
                     )),
      'posts_per_page' => 3,
      'ignore_sticky_posts' => 1,
      'orderby' => 'rand',
      'post__not_in'=>array($post->ID)
   ) );

//Parcurge postările și le afișează...
    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();
   }

bine, acum acest cod ajută la rezolvarea problemei cu utilizarea tipurilor de postare personalizate pentru a filtra într-o taxonomie personalizată. De exemplu, am avut project ca taxonomie și pentru tipul de postare personalizat. Când adaug diferite etichete la fiecare proiect, acestea creează o taxonomie tagportfolio care adaugă toate taxonomiile și le interoghează.

7 dec. 2012 03:19:25
Comentarii

Super, aproape că mi-a salvat viața, mulțumesc mult pentru soluția super ușoară.

Jodyshop Jodyshop
17 sept. 2021 02:30:00