zachshallbetter
  • 0
Учитель

Исключить текущий пост из цикла

  • 0

У меня есть пользовательский тип поста для аксессуаров. Когда вы просматриваете сообщение, оно также показывает связанные сообщения. Это выглядит великолепно, но также показывает текущий пост среди связанных постов.

Есть ли способ исключить текущий пост из цикла?

<div>
    <?php 
    $category = get_the_category(); 
    $model = $category[1]->cat_name;
    $accessory = array('numberposts' => 8, 'offset'=> 1, 'post_type' => 'accessory', 'category_name' => $model, 'order' => 'DESC');
    query_posts( $accessory );
   ?>
      <?php if (have_posts()) : ?>
       <?php while (have_posts()) : the_post(); ?>
        <div>
            <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'openeye' ), 'after' => '</div>' ) ); ?>
            <h4><?php the_title(); ?></h4>
            Part Number: <?php echo get_post_meta($post->ID, "accessory-part-number", true); ?>
            <?php $desc = get_post_meta($post->ID, "accessory-description", true); ?>
            <p><?php echo utf8_truncate( $desc ); ?></p>
            <a href="<?php echo get_permalink(); ?>">Learn more about the <?php the_title(); ?></a>
        </div>
        <?php endwhile; ?>
      <?php endif; ?>
    </div>
</div>   
Share
  1. Попробуй это:

    Для вашего шаблона single-accessory.php:

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    
        <?php 
          // excludes this post from 'Related posts' in the sidebar
          $GLOBALS['current_id'] = $post->ID; 
    
          ?>
    

    Для вашей боковой панели или места, где вы хотите показывать похожие сообщения:

    <?php
            if (is_singular('accessory') ) :
            global $post;
            $categories = get_the_category();
                $exclude = $GLOBALS['current_id'];
            $args = array(
            'post_type' => 'accessory',
            'post__not_in' => array($exclude),
            'posts_per_page' => -1
                     );
    
            foreach ($categories as $category) :
            $posts = get_posts($args);
    
            if(count($posts) > 1) {
    
                     //do stuff
    }
     endforeach; 
     ?>
    
    • 0
  2. Во-первых, вы никогда не должны использовать query_posts() для вторичных циклов.

    Что касается исключения текущего поста, то в аргументах будет что-то вроде этого:

    'post__not_in` => array( get_the_ID() )
    
    • 0

Оставить ответ

You must login to add an answer.