3

我想从显示我的博客文章中排除类别。我的类别 id 是62。类别名称是perfect_work

这是我的 wordpress 博客模板代码:

    <div id="left" class="eleven columns">

    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('paged='.$paged);
    ?>

    <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

        <div class="post" id="post-<?php the_ID(); ?>">

            <div class="title">

                <h2><a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title(); ?>" ><?php the_title(); ?></a></h2>

                <div class="postmeta">  <span>by <?php the_author_posts_link(); ?></span> | <span><?php the_time('l, F jS, Y') ?></span> | <span><?php the_category(', '); ?></span> </div>

            </div>

            <div class="entry">

            <?php $image_attr = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'top_feature'); ?>    

                <a href="<?php the_permalink() ?>"><img src="<?php echo $image_attr[0]; ?>" class="postim scale-with-grid" id="blog-thumb" ></a>
                <?php wpe_excerpt('wpe_excerptlength_archive', ''); ?>
                <div class="clear"></div>
            </div>
        </div>

    <?php endwhile; ?>
    <?php getpagenavi(); ?>
    <?php $wp_query = null; $wp_query = $temp;?>
</div>

我已经尝试过使用

$wp_query = new WP_Query('cat=-62');

它不起作用。我也放

<?php query_posts('cat=-62'); ?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

它的工作,但页面导航不起作用,也没有显示其他人的帖子。仅第 1 次 5 后显示。

任何解决方案?

4

4 回答 4

1

获取页码

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

然后你可以使用

$wp_query = new WP_Query('cat=-62&paged=' . $paged);

或使用

$cat_id = get_cat_ID('perfect_work');
$wp_query = new WP_Query('cat=-' . $cat_id . '&paged=' . $paged);

然后循环

if($wp_query->have_posts()) :
    while ($wp_query->have_posts()) : $wp_query->the_post();
        // ...
    endwhile;
endif;
于 2013-10-20T20:27:55.603 回答
0

试试这个,你必须指定showposts限制帖子

<?php $wp_query->set( 'cat', '-62' ); ?>
<?php query_posts( 'showposts=10' ); ?> 
<?php if( have_posts() ) : ?> 
<?php while( have_posts() ) : the_post(); ?>

.
.
.
<?php endwhile; ?>
<?php endif; ?>

注意:减号表示从数据库中排除属于该类别的所有帖子。反过来,循环将永远不会有该类别 id 的帖子,而只会处理指定数量的其他类别 id 的帖子。

于 2013-10-20T20:20:05.997 回答
0

请阅读WP_Query上的 codex ,它非常详细,请查看category params 部分

只需在您不想要的类别前面添加一个减号-,因此下面的代码表示显示类别 10 和 11 的帖子,但不包括类别 62

$recent = new WP_Query("showposts=3&cat=10,11,-62")
于 2013-10-20T20:21:13.283 回答
0

您不需要$temp在查询之前或之后使用该变量。你应该使用这样的东西:

//This should do the trick
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

$args = array(
    'cat' => -62,
    'paged' => $paged
);

// the query
$the_query = new WP_Query( $args ); ?>

<?php if ( $the_query->have_posts() ) : ?>

  <!-- the loop -->
  <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
  <?php endwhile; ?>
  <!-- end of the loop -->

  <!-- pagination here -->
  //The real trick!
  <?php wp_reset_postdata(); ?>

有两点需要注意:

  • 分页查询参数
  • 重置查询使用wp_reset_postdata()
于 2013-10-20T20:22:02.900 回答