it-swarm.com.de

Benutzerdefinierter Beitragstyp und Taxonomie - verwandte Beiträge anzeigen

Ich habe einen benutzerdefinierten Beitragstyp "Projekte" mit der benutzerdefinierten Taxonomie "Dienste". Für jedes Projekt können mehrere Dienste aktiviert sein. Auf der Projektseite verwende ich den folgenden Code, um verwandte Projekte zurückzuziehen

    <?php
//for in the loop, display all "content", regardless of post_type,
//that have the same custom taxonomy (e.g. genre) terms as the current post
$backup = $post;  // backup the current object
$found_none = '';
$taxonomy = 'services';//  e.g. post_tag, category, custom taxonomy
$param_type = 'services'; //  e.g. tag__in, category__in, but genre__in will NOT work
$post_types = get_post_types( array('public' => true), 'names' );
$tax_args=array('orderby' => 'none');
$tags = wp_get_post_terms( $post->ID , $taxonomy, $tax_args);

if ($tags) {
echo "<section class='divide'>";
echo "<div class='container'>";
echo "<h2 class='no-border'>Related projects</h2>";
echo "<ul class='portfolio'>";
  foreach ($tags as $tag) {
    $args=array(
      "$param_type" => $tag->slug,
      'post__not_in' => array($post->ID),
      'post_type' => $post_types,
      'showposts'=>3,
      'caller_get_posts'=>1
    );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      ?>
      <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <li>
          <a href="<?php the_permalink(); ?>">
            <img src="<?php $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), array( 315,225 ), true, '' ); echo $src[0]; ?>" />
            <h3><?php the_title(); ?></h3>
            <?php the_field('client'); ?>
          </a>
        </li> 

        <?php $found_none = '';
      endwhile; ?>

      <?php
    }
  }
  echo '</ul>';
  echo "</div>";
  echo "</section>";
}
if ($found_none) {
echo $found_none;
}
$post = $backup;  // copy it back
wp_reset_query(); // to use the original query again
?>

Ursprünglich sah es so aus, als würde es gut funktionieren. Wenn ein Projekt jedoch mehr als einen Service hat, werden die zurückgezogenen Beiträge dupliziert.

Also irgendwelche Tipps? Gibt es eine bessere Möglichkeit, verwandte Posts (nach Taxonomie) zurückzuziehen, und wie kann ich die Duplizierung von Ergebnissen verhindern?

Vielen Dank!

1
user643284

Sie führen für jedes Tag eine separate Abfrage aus, die nicht nur verschwenderisch ist, sondern auch die wiederholten Posts verursacht. Sie sollten den Code neu schreiben, um nur eine Abfrage zu erstellen, die nach allen Tags sucht. Versuchen Sie etwas in dieser Richtung:

<?php

// Generate an array of taxonomy IDs
$tax_IDs = array();
foreach ($tags as $tag) {
    $tax_IDs[] = $tag->ID;
}

// Use your array of taxonomy IDs in the query args
$args = array(
  'post_type' => 'your_custom_post_type',
  'post__not_in' => array($post->ID),
  'showposts'=> 3,
  'tax_query' => array(
        array(
            'taxonomy' => 'your_custom_taxonomy',
            'field' => 'id',
            'terms' => $tax_IDs
        )
    )
);

// Run your query
$my_query = new WP_Query($args);

?>
1
WhiskerSandwich