3

我创建了两个带分页的循环(第一个循环通过CAT'S类别循环,第二个循环通过DOG'S类别),但现在我被卡住了:(

问题:在我的网站(CAT'S类别)上单击“下一个条目”后,它转到第二个进入该类别,但它也进入我的DOG'S类别第二个条目(我不想要那个!!)。反之亦然......

我喜欢做的是:我在我的CAT'S类别上单击“下一个条目”,它只进入类别(CAT'S)中的下一个帖子,而不是我的DOG'S类别中的第二个帖子,或者其他方式:我点击我的DOG'S类别中的“下一个条目” ,它只进入该类别 (DOG'S)中的下一个帖子,而不是我的CAT'S类别中的第二个帖子。

有人能帮助我吗?我前段时间在wordpress.stackexchange.com上寻求帮助, 但没有得到任何答案,所以我在这里提出问题。

索引 php 看起来像这样:

<?php get_header(); ?>
<?php get_sidebar(); ?>
<div id="blog">         
    <?php         
    $args = array(
    'category_name' => 'cats' 
    );
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_query($args . '&paged=' . $paged . '&cat=-3');      
    while( $the_query -> have_posts()) : $the_query -> the_post();              
    ?>

    <div class="post">
    <div class="post_title">
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    </div>
        <div class="entry"> 
            <?php the_post_thumbnail(); ?>
            <?php the_content('Read on...'); ?>

            <p class="postmetadata">
            <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
            <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
            </p>
        </div>
    </div>

    <?php endwhile;?>
    <?php wp_reset_postdata();?>
    <div class="navigation">
    <div style="float:left;" class="alignleft"><?php previous_posts_link('&laquo; Previous Entries') ?></div>
    <div style="float:right;" class="alignright"><?php next_posts_link('Next Entries &raquo;',$the_query->max_num_pages) ?></div>
    </div>      
    </div>

    <div id="blogs">    
    <?php       
    $args = array(
    'category_name' => 'dogs' 
    );
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_query($args . '&paged=' . $paged . '&cat=-10');
    while( $the_query -> have_posts()) : $the_query -> the_post();              
    ?>

    <div class="post">
    <div class="post_title">
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    </div>
        <div class="entry"> 
            <?php the_post_thumbnail(); ?>
            <?php the_content('Read on...'); ?>

            <p class="postmetadata">
            <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
            <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
            </p>

        </div>
    </div>

    <?php endwhile;?>
    <?php wp_reset_postdata();?>
    <div class="navigation">
    <div style="float:left;" class="alignleft"><?php previous_posts_link('&laquo; Previous Entries') ?></div>
    <div style="float:right;" class="alignright"><?php next_posts_link('Next Entries &raquo;',$the_query->max_num_pages) ?></div>
    </div>
    </div>
   <?php get_footer(); ?>
4

4 回答 4

2

您需要 2 个不同的分页值,因此添加一些新的分页值并重写查找它们的规则(它们实际上只是为了使 url 看起来更整洁)。重写规则和分页链接格式意味着您可以分页浏览一个类别,而另一个类别页面不会更改。

functions.php

function add_new_rules()
{
  // new 'paged' variables
  global $wp;
  $wp->add_query_var('paged_cats');
  $wp->add_query_var('paged_dogs');

  // rewrite rules
  add_rewrite_rule('page/cats/(\d+)/dogs/(\d+)', 'index.php?paged_cats=$matches[1]&paged_dogs=$matches[2]', 'top');
  add_rewrite_rule('page/cats/(\d+)/dogs/?$', 'index.php?paged_cats=$matches[1]&paged_dogs=1', 'top');

  if( !array_key_exists('page/cats/(\d+)/dogs/(\d+)', (array)get_option('rewrite_rules')) )
  {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
  }
}
add_filter('init', 'add_new_rules');

检查新的查询变量index.php并将它们用于每个 WP_Query 和相关的分页链接。

<div id="blog">
  <?php
  $paged_cats = (get_query_var('paged_cats')) ? get_query_var('paged_cats') : 1;
  $paged_dogs = (get_query_var('paged_dogs')) ? get_query_var('paged_dogs') : 1;

  $cats = new WP_query(array(
    'category_name' => 'cats',
    'paged' => $paged_cats,
    'posts_per_page' => 1
  ));
  while( $cats->have_posts() ) : $cats->the_post();
    ?>
    <div class="post">
      <div class="post_title">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
      </div>
      <div class="entry">
        <?php the_post_thumbnail(); ?>
        <?php the_content('Read on...'); ?>
        <p class="postmetadata">
          <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
          <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
        </p>
      </div>
    </div>
  <?php endwhile; ?>
  <?php wp_reset_postdata(); ?>
  <?php if ( $cats->max_num_pages > 1 ) : ?>
  <div class="navigation">
    <?php
    echo paginate_links(array(
      'base' => home_url("page/cats/%#%/dogs/{$paged_dogs}"),
      'format' => '%#%',
      'current' => $paged_cats,
      'total' => $cats->max_num_pages,
    ));
    ?>
  </div>
  <?php endif; ?>
</div>

  <hr>

<div id="blogs">
  <?php
  $dogs = new WP_query(array(
    'category_name' => 'dogs',
    'paged' => $paged_dogs,
    'posts_per_page' => 1
  ));
  while( $dogs->have_posts() ) : $dogs->the_post();
    ?>
    <div class="post">
      <div class="post_title">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
      </div>
      <div class="entry">
        <?php the_post_thumbnail(); ?>
        <?php the_content('Read on...'); ?>
        <p class="postmetadata">
          <?php _e('Filed under&#58;'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php  the_author(); ?><br />
          <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?> <?php edit_post_link('Edit', ' &#124; ', ''); ?>
        </p>
      </div>
    </div>
  <?php endwhile;?>
  <?php wp_reset_postdata();?>
  <?php if ( $dogs->max_num_pages > 1 ) : ?>
  <div class="navigation">
    <?php
    echo paginate_links(array(
      'base' => home_url("page/cats/{$paged_cats}/dogs/%_%"),
      'format' => '%#%',
      'current' => $paged_dogs,
      'total' => $dogs->max_num_pages,
    ));
    ?>
  </div>
  <?php endif; ?>
</div>
于 2012-12-14T10:38:01.560 回答
1

我在这里找到答案https://wordpress.stackexchange.com/questions/47259/multiple-wp-query-loops-with-pagination,选择答案对我有用。它使用格式。

<!-- Cats -->
<div class="animals">
    <?php
        $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
        $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;

        // Custom Loop with Pagination 1
        // http://codex.wordpress.org/Class_Reference/WP_Query#Usage
        $args1 = array(
            'paged'          => $paged1,
            'posts_per_page' => 2,
        );
        $query1 = new WP_Query( $args1 );

        while ( $query1->have_posts() ) : $query1->the_post();
            the_title();
            echo '<br>';
            the_category(' ');
            the_excerpt();
            echo '<hr>';
        endwhile;

        // http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
        $pag_args1 = array(
            'format'  => '?paged1=%#%',
            'current' => $paged1,
            'total'   => $query1->max_num_pages,
            'add_args' => array( 'paged2' => $paged2 )
        );
        echo paginate_links( $pag_args1 );
    ?>
</div>

<!-- Dogs -->
<div class="animals">
    <?php
        // Custom Loop with Pagination 2
        $args2 = array(
            'paged'          => $paged2,
            'posts_per_page' => 2,
        );
        $query2 = new WP_Query( $args2 );

        while ( $query2->have_posts() ) : $query2->the_post();
            the_title();
            echo '<br>';
            the_category(' ');
            the_excerpt();
            echo '<hr>';
        endwhile;

        $pag_args2 = array(
            'format'  => '?paged2=%#%',
            'current' => $paged2,
            'total'   => $query2->max_num_pages,
            'add_args' => array( 'paged1' => $paged1 )
        );
        echo paginate_links( $pag_args2 );
    ?>
</div>

而且由于它正在生成一个不干净的 url,您可以添加一个 rel="nofollow" 用于 SEO 目的。这是如何添加 rel="nofollow" 的说明

于 2012-12-13T04:51:36.783 回答
1

您的问题是:在分页时,wordpress 发送页面 id 或计数以获取下一个条目,并且两个列表的回发变量的名称相同。当它进入服务器时,两个列表都会通过查看 post 变量来获得进入下一页的请求。

jho1086 提到的解决方案是创建分页变量作为两个列表的自定义变量并分配它。然后,这将为每个列表发送一个不同的变量,您可以根据需要移动下一个或上一个。

您需要同时添加一个分页变量并将其添加到您的分页中。在 jho1086 的解决方案中看到 $args1 和 $pag_args1 都引用了 $paged2 来实现这一点。

  • 当您为猫选择第 2 页时,它应该向服务器发送 catpage=2
  • 当您为 Docs 选择第 2 页时,它应该向服务器发送 dogpage=2

如果您可以为分页链接解决此问题并传递参数,那么您可以执行以下操作

  • 当服务器获取猫列表时,使用 catpage 作为分页参数
  • 当服务器获取狗列表时,使用 dogpage 作为分页参数

这是理论上的,肯定会奏效。您可以通过 firebug 测试进出请求的变量并返回您遇到的其他问题,但是您的循环转到第 2 页以单击一个的原因是两个循环都在同一个 post 变量上分页。

于 2012-12-13T22:43:14.630 回答
0

next_post_link()previous_post_link()函数有第三个参数称为'in_same_cat'- 您需要将其设置为 TRUE。阅读 codex 页面(单击答案中的函数名称。

来自法典:

<?php next_post_link('%link', 'Next post in category', TRUE); ?>

他们甚至还有第四个参数'excluded_categories' ,您也可以使用它来实现相同的目标,或者将两者结合起来以获得更复杂的结果。

于 2012-12-07T13:33:19.713 回答