简体   繁体   English

与wordpress相关的帖子按类别重复

[英]wordpress related posts by category duplicating

I am having an issue getting the $do_not_duplicate working properly I have several title duplicating on my blog and i need it to stop. 我在使$ do_not_duplicate正常工作时遇到问题,我的博客上有多个重复的标题,我需要停止它。 Here is what i have so far: 这是我到目前为止所拥有的:

<?php if (is_single()): ?>
<section>
<h3>Related Posts</h3>
<?php 
            global $post;
            $cats = wp_get_post_categories($post->ID);
            $do_not_duplicate[] = $post->ID; 
            if ( count ( $cats ) > 0):
            $args = array( 'numberposts' => 3, 'category' => implode($cats, ","), 'exclude' => $post->ID, 'post__not_in' => $do_not_duplicate );
            $related_posts = get_posts( $args );
            if (count($related_posts)): ?>

            <ul>
                <?php foreach ($related_posts as $post) :  setup_postdata($post); ?>
                <li><a href="<?php the_permalink() ?>"><?php while ( have_posts() ) : the_post(); $do_not_duplicate[] = $post->ID; if ( get_the_title() ) the_title(); else the_ID(); ?><?php 
endwhile; 
wp_reset_query(); ?>
                </a></li>

                <?php endforeach; ?>
            </ul>




            <?php else: ?>
            <p>No related posts found.</p>
            <?php endif; ?>
            <?php else: ?>
            <p>No related posts found.</p>
            <?php endif; ?>

        </section>
        <?php endif; ?>

you have a while (have_posts() ) within a foreach and this produces the duplication. 您在foreach中有片刻(have_posts()),这会产生重复。 You may change your loop to something like this: 您可以将循环更改为以下形式:

<?php 
        global $post;
        $cats = wp_get_post_categories($post->ID);
        $do_not_duplicate[] = $post->ID; 
        if ( count ( $cats ) > 0):
        $args2 = array( 'numberposts' => 3, 'category' => implode($cats, ","), 'exclude' => $post->ID, 'post__not_in' => $do_not_duplicate );
        $related_posts = get_posts( $args2 );
        if (count($related_posts)): 
  ?>

  <ul>
    <?php foreach ($related_posts as $post) :  setup_postdata($post); ?>
            <li><a href="<?php the_permalink() ?>" ><?php $do_not_duplicate[] = $post->ID; if ( get_the_title() ) the_title(); else the_ID(); ?></a></li>
    <?php endforeach; ?>
        </ul>
        <?php wp_reset_query(); ?>
  <?php endif;endif; ?>

At the end of the loop, the var $do_not_duplicate save the id of the post and all the id of the relative posts. 在循环结束时,变量$ do_not_duplicate保存帖子的ID和所有相关帖子的ID。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM