按类别列出帖子不包括当前帖子

时间:2012-05-23 作者:user983248

我试图从一个类别中获取一个帖子列表,回显该类别中所有帖子的标题和永久链接,但如果当前帖子在该列表中,则排除永久链接和帖子名称。

它将显示在single上。循环后或循环内的php

有人知道这是否可能,如果可能,怎么可能?

提前感谢

<?php query_posts(\'category_name=MyCatName&showposts=-1\'); ?>
<?php while (have_posts()) : the_post(); ?>

        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
          </a>
        <?php endwhile; ?>

2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

首先,请注意,由于自定义循环是辅助循环/查询,因此应该使用WP_Query 类而不是query_posts(). Read why.

尽管如此,

/* main post\'s ID, the below line must be inside the main loop */
$exclude = get_the_ID();

/* alternatively to the above, this would work outside the main loop */
global $wp_query;
$exclude = $wp_query->post->ID;

/* secondary query using WP_Query */
$args = array(
    \'category_name\' => \'MyCatName\', // note: this is the slug, not name!
    \'posts_per_page\' => -1 // note: showposts is deprecated!
);
$your_query = new WP_Query( $args );

/* loop */
echo \'<ul>\';
while( $your_query->have_posts() ) : $your_query->the_post();
    if( $exclude != get_the_ID() ) {
        echo \'<li><a href="\' . get_permalink() . \'">\' .
            get_the_title() . \'</a></li>\';
    }
endwhile;
echo \'</ul>\';
那就行了。

SO网友:Geert

基于Johannes的代码,但使用post__not_in 参数:

/* Secondary query using WP_Query */
$wpse63027_posts = new WP_Query( array(
    \'category_name\'  => \'MyCatName\',
    \'posts_per_page\' => -1,
    \'post__not_in\'   => array( get_queried_object_id() ), // Exclude current post ID (works outside the loop)
) );
然后,您可以循环浏览新帖子:

if ( $wpse63027_posts->have_posts() )
{
    while( $wpse63027_posts->have_posts() )
    {
        $wpse63027_posts->the_post();

        // Now do everything you want with the default API calls
        // Example
        the_title( \'<h2>\', \'</h2>\', true );
        the_content();
    }
}

WP_Query » Post_*/Page_Parameters

结束

相关推荐

WP_LIST_CATEGORIES()排除除一个类别外的所有类别

有没有办法排除除一个类别之外的所有类别?我想显示一个类别和它的子类别作为下拉菜单,但管理员可能会添加更多的子类别,所以我不想限制他们可以放在那里的唯一ID。所以我想排除除1及其子类别之外的所有类别。wp\\u list\\u categories()是否可以这样做?