我创建了两个带分页的循环(第一个循环循环通过 CAT'S 类别,第二个循环通过 DOG'S 类别),但现在我被卡住了:(
问题:点击我网站上的“下一个条目”( CAT'S 类别)后,它将进入该类别的第二个条目但它也进入我的 DOG'S 类别第二个条目(我不想要那个!! )。反之亦然......
我喜欢做的是:点击我的 CAT'S 类别中的“下一个条目”,它仅到 THAT类别中的下一个帖子( CAT'S)但不到我的 DOG'S 类别中的第二篇帖子,或者换句话说:我点击 DOG'S上的“下一个条目”类别,它仅到 THAT类别(DOG'S)中的下一篇文章,但 NOT 到 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:'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> <?php edit_post_link('Edit', ' | ', ''); ?>
</p>
</div>
</div>
<?php endwhile;?>
<?php wp_reset_postdata();?>
<div class="navigation">
<div style="float:left;" class="alignleft"><?php previous_posts_link('« Previous Entries') ?></div>
<div style="float:right;" class="alignright"><?php next_posts_link('Next Entries »',$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:'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> <?php edit_post_link('Edit', ' | ', ''); ?>
</p>
</div>
</div>
<?php endwhile;?>
<?php wp_reset_postdata();?>
<div class="navigation">
<div style="float:left;" class="alignleft"><?php previous_posts_link('« Previous Entries') ?></div>
<div style="float:right;" class="alignright"><?php next_posts_link('Next Entries »',$the_query->max_num_pages) ?></div>
</div>
</div>
<?php get_footer(); ?>
答案 0 :(得分:2)
你需要2个不同的分页值,所以添加一些新的分页值并重写寻找它们的规则(它们实际上只是为了使网址看起来更整洁)。重写规则和分页链接格式意味着您可以翻阅一个类别,而另一个类别页面不会更改。
在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:'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> <?php edit_post_link('Edit', ' | ', ''); ?>
</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:'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br />
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> <?php edit_post_link('Edit', ' | ', ''); ?>
</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>
答案 1 :(得分: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,你可以为SEO目的添加一个rel =“nofollow”。 Here is the instruction how to do add rel="nofollow"
答案 2 :(得分:0)
函数next_post_link()和previous_post_link()有一个名为'in_same_cat'
的第三个参数 - 您需要将其设置为TRUE。
阅读codex页面(单击答案中的函数名称。
来自codex:
<?php next_post_link('%link', 'Next post in category', TRUE); ?>
他们甚至还有第四个参数'excluded_categories'
,你也可以用它来实现同样的目的,或者将它们结合起来以获得更复杂的结果。
答案 3 :(得分:0)
你的问题是这样的: 在分页时,wordpress会发送页面ID或计数以获取下一个列表,并且回发中的变量名称对于两个列表都是相同的。当它进入服务器时,两个列表都会通过查看发布变量来获取进入下一页的请求。
jho1086提到的解决方案是创建分页变量作为两个列表的自定义变量并分配它。然后,这将为每个列表发送一个不同的变量,您可以根据需要移动下一个或上一个。
您需要同时添加分页变量并将其添加到分页中。在jho1086的solutuin中看到$ args1和$ pag_args1都引用$ paged2来实现这一点。
如果您可以为分页链接解决此问题并传递参数,那么您可以执行以下操作
这在理论上肯定会奏效。您可以通过firebug测试进出请求的变量,然后回过头来解决其他问题,但是你的循环转到第2页点击其中的原因是两个循环都在相同的post变量上进行分页。