如何在Wordpress中的single.php上循环访问特定类别?

时间:2010-04-23 17:58:44

标签: wordpress pagination categories

我已经创建了一个自定义页面,并将其设置为我的主页,在此自定义页面中,我从特定类别中提取最新帖子,我还创建了一种分页形式,点击后将采用用户到single.php。我对single.php的意图是有两个自定义循环。

自定义循环 我希望single.php能够区分它来自主页并循环遍历所有标记为与主页上相同类别的帖子。

其中一些帖子必须使用多个类别标记,因此循环必须知道忽略其他类别,并且只关注相关类别。这有意义吗?

自定义循环二 如果用户没有从主页到达,则single.php将按照通常的方式运行,即,如果用户来自index.php(博客),他们将被带到第二个循环(博客帖子)

然而,我似乎无法区分这两个循环,我可能会使问题复杂化,因为我有一个循环将所有内容包装在一起,然后我有一个循环用于我的自定义分页。

以下代码向您展示我正在谈论的内容

custompage.php(设置为主页) - 这个工作正常,但我会发布它只是任何人都可以整理它

<?php query_posts('cat=1'); ?>

<?php
$myPosts = new WP_Query();
$myPosts->query('showposts=1');

if (have_posts()) :
while ($myPosts->have_posts()) : $myPosts->the_post();
?>

<script type="text/javascript">$.backstretch("<?php $key="image"; echo get_post_meta($post->ID, $key, true);?>");</script>
<div id="post-<?php the_ID(); ?>" class="info">
      <h2><?php the_title(); ?></h2>
        <ul class="nav">
           <?php query_posts('posts_per_page=1&offset=1'); the_post(); ?>
           <li class="prev"><a href="<?php the_permalink() ?>">Previous</a></li>
            <?php wp_reset_query(); ?>
            <li class="next"></li>
        </ul>
</div>
<!-- end .info -->

<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

single.php - 目前已损坏

<?php if( in_category('1') ) { ?>
   <!-- start -->
   <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div id="post-<?php the_ID(); ?>" class="info">
    <script type="text/javascript">$.backstretch("<?php $key="image"; echo get_post_meta($post->ID, $key, true);?>");</script>
            <h2><?php the_title(); ?></h2>
            <ul class="nav">
                <li class="prev"><?php previous_post_link('%link', '&nbsp;', 'true', '1') ?></li>
                <li class="next"><?php next_post_link('%link', '&nbsp;', 'true', '1'); ?></li>
                <!--li class="prev"><?php //previous_post_link('%link', '%title;', 'true', '1') ?></li>
                <li class="next"><?php //next_post_link('%link', '%title;', 'true', '1'); ?></li-->
            </ul>
    </div>
    <!-- end .info -->
    <?php endwhile; else: ?>
    <?php endif; ?>
   <!-- end -->

<?php }else{ ?>

   <div id="content" class="widecolumn" role="main">
   <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
      <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
         <h2><?php the_title(); ?></h2>
         <div class="entry">
            <?php the_content('<p class="serif">Read the rest of this entry &raquo;</p>'); ?>
         </div>
      </div>
   <?php comments_template(); ?>
   <?php endwhile; else: ?>
      <p>Sorry, no posts matched your criteria.</p>
    <?php endif; ?>
   </div>

<?php } ?>

我似乎遇到的问题是,当一个帖子被标记为两个类别时,wordpress似乎无法区分这两个类别,而不是继续进行下一个类别,它会中断默认为第二个循环。

1 个答案:

答案 0 :(得分:0)

怎么样?

HOMEPAGE
<?php
$myPosts = new WP_Query();
$myPosts->query('showposts=1&cat=1');

if (have_posts()) :
while ($myPosts->have_posts()) : $myPosts->the_post();
?>

<script type="text/javascript">$.backstretch("<?php $key="image"; echo get_post_meta($post->ID, $key, true);?>");</script>
<div id="post-<?php the_ID(); ?>" class="info">
      <h2><?php the_title(); ?></h2>
        <ul class="nav">
           <?php query_posts('posts_per_page=1&offset=1'); the_post(); ?>
           <li class="prev"><a href="<?php the_permalink() ?>">Previous</a></li>
           <?php wp_reset_query(); ?> <-- not sure if this will reset the overall query
           <li class="next"></li>
        </ul>
</div>    
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

查询顶部的queryposts('cat = 1')不会使用该类别运行,必须在自定义查询中设置类别

$myPosts->query('showposts=1&cat=1');

第2页(SINGLE.PHP)有2个循环.. 如果用户从主页进入单个页面,您想要将当前类别附加到查询中,而不使用此wordpress(在单个页面上将默认循环遍历所有帖子)

所以对于单曲页面,下面会有什么好处吗?

<?php if( in_category('1') ) { ?>
 <!-- your selected category -->
   <!-- start -->
   <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div id="post-<?php the_ID(); ?>" class="info">
    <script type="text/javascript">$.backstretch("<?php $key="image"; echo get_post_meta($post->ID, $key, true);?>");</script>
            <h2><?php the_title(); ?></h2>
            <ul>
             <php global $post;
              $my_query = get_posts('numberposts=1&cat=1&offset=-1');
              foreach($my_query as $post) :
          setup_postdata($post);
          $link = get_post_meta($post->ID, 'site-url', true); ?>
     <li>
                <a href="<php echo $link; ?>"><php the_title(); ?></a>
             </li>
            <php endforeach; ?>
            <php global $post;
              $my_other_query = get_posts('numberposts=1&cat=1&offset=1');
              foreach($my_other_query as $post) :
          setup_postdata($post);
          $link = get_post_meta($post->ID, 'site-url', true); ?>
     <li>
                <a href="<php echo $link; ?>"><php the_title(); ?></a>
             </li>
            <php endforeach; ?>
           </ul>

    </div>
    <!-- end .info -->
    <?php endwhile; else: ?>
    <?php endif; ?>
   <!-- end -->

<?php }else{ 
    include('standard-wp-singles-page-stuff.php');
} ?>

然后一旦你的单曲页面加载它将检查该帖子中的当前类别,如果它在类别1中,那么它将加载你的自定义循环,然后它将循环通过2个帖子,在同一类别中?给你2个链接到其他帖子。还在该查询上使用偏移量应该向前提供一个链接并向后链接吗?

希望有所帮助..

修复代码布局..没有太好用:P