忽略loop-Wordpress中的某些帖子

时间:2013-01-03 17:11:58

标签: loops foreach wordpress foreach-loop-container

我在自定义页面上有两个循环,我希望从第二个循环中省略第一个循环中带有帖子ID的帖子(当然显示来自类别36的所有其他帖子)。

编辑:这是php文件中的完整代码:

<?php
global $udesign_options;

// construct an array of portfolio categories
$portfolio_categories_array = explode( ',', $udesign_options['portfolio_categories'] );

if ( $portfolio_categories_array != "" && post_is_in_category_or_descendants( $portfolio_categories_array ) ) :
// Test if this Post is assigned to the Portfolio category or any descendant and switch the single's template accordingly
include 'single-Portfolio.php';
else : // Continue with normal Loop (Blog category)

get_header();

$content_position = ( $udesign_options['blog_sidebar'] == 'left' ) ? 'grid_16 push_8' : 'grid_16';
if ( $udesign_options['remove_single_sidebar'] == 'yes' ) $content_position = 'grid_24';
?>
<div id="content-container" class="container_24">
<div id="main-content" class="<?php echo $content_position; ?>">
    <div class="main-content-padding">
<?php if (have_posts()) :
        while (have_posts()) : the_post(); ?>
        <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
            <div class="entry" style="margin:-30px 0 00px 0;">
<?php                           // Post Image
                            if( $udesign_options['display_post_image_in_single_post'] == 'yes' ) display_post_image_fn( $post->ID, false );
            the_content(__('<p class="serif">Read the rest of this entry &raquo;</p>', 'udesign'));
            wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>


            </div>


<?php
$args = array( 'category' => 36, 'post_type' =>  'post' ); 
$postslist = get_posts( $args );    
foreach ($postslist as $post) :  setup_postdata($post); 
?>     
<h2><?php the_title(); ?></h2> 
<?php the_content(); ?> 
<?php echo do_shortcode('[divider_top]'); ?>
<?php endforeach; ?> 



<div><?php comments_template();
        endwhile; else: ?>
        <p><?php esc_html_e("Sorry, no posts matched your criteria.", 'udesign'); ?></p>
<?php endif; ?></div>
    </div><!-- end main-content-padding -->
</div><!-- end main-content -->

<?php
if( ( !$udesign_options['remove_single_sidebar'] == 'yes' ) && sidebar_exist('BlogSidebar') ) { get_sidebar('BlogSidebar'); }
?>

</div><!-- end content-container -->
<?php endif; // end normal Loop ?>

<div class="clear"></div>

<?php get_footer(); ?>

我想通了,这个代码需要插入$ args = array('exclude'=&gt; theExcludedID,'category'=&gt; 36,'post_type'=&gt;'post');

2 个答案:

答案 0 :(得分:1)

根据问题的更新,似乎第一个循环显示来自自定义查询的portfolio_categories中的所有类别,最有可能还包括来自类别36的类别。

我可以想到在第二个循环中不重复帖子的唯一方法是从第一个循环中排除所有类别36的帖子。

我无法测试代码,但这里有一个如何操作的想法:

在Loop之后添加3行代码,如下所示:

if (have_posts()) : while (have_posts()) : the_post(); // This is the Loop
$Category =  get_the_category( $post->ID );
$CatID = $Category[0]->cat_ID ; // The 0 assumes the post has only one category. If there are more, the number must be changed accordingly.
if ($CatID == 36) continue;

答案 1 :(得分:0)

在循环顶部使用以下内容:

if(get_the_ID() == theExcludedID){
    continue;
}

跳过任何迭代。