2列,独立分页

时间:2017-08-03 作者:metalbug

我是新手,我需要一些帮助。

有两列,每列都有自己的独立分页。我该怎么做?

如果你能告诉我如何添加评论功能,我将更加感谢你。

以下是我目前的代码:

            $paged1 = isset( $_GET[\'paged1\'] ) ? (int) $_GET[\'paged1\'] : 1;
            $paged2 = isset( $_GET[\'paged2\'] ) ? (int) $_GET[\'paged2\'] : 1;

$args = array(
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'ID\',
    \'paged\'          => $paged1,
    \'order\' => \'desc\');

$blank_posts = array();
$content_post =array();

$posts = new WP_Query( $args );

if ( $posts->have_posts() ) : 
    while ( $posts->have_posts() ) : $posts->the_post();
    global $post;
       $content = get_the_content();
        if(empty($content)) { 
            array_push( $blank_posts, $post);
        }else{
            array_push( $content_post, $post);
        }
    endwhile;
endif;

if(!empty($blank_posts)){
    foreach ($blank_posts as $pst) {
        echo "ID= ". $pst->ID . \', \'. "Title= ". $pst->post_title .\'<hr />\';
    }
            $pag_args1 = array(
                \'format\'  => \'?paged1=%#%\',
                \'current\' => $paged1,
                \'total\'   => $posts->max_num_pages,
                \'add_args\' => array( \'paged2\' => $paged2 )
            );
        echo paginate_links( $pag_args1 );
}

if(!empty($content_post)){
    foreach ($content_post as $pst) {
        echo \'<a href=\'. $pst->guid .\'>\' .$pst->post_title. \'</a> \';
    }
            $pag_args2 = array(
                \'format\'  => \'?paged1=%#%\',
                \'current\' => $paged2,
                \'total\'   => $posts->max_num_pages,
                \'add_args\' => array( \'paged2\' => $paged2 )
            );
        echo paginate_links( $pag_args2 );
}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

为此,您需要:

使用2个查询而不是1个自定义分页,内置分页功能永远不会与此配合使用,WP没有2个post主循环的概念,但在我们开始之前

一个更简单、更适合用户的替代方案就是列出前5篇文章,下面有一个查看更多按钮。让按钮将用户发送到WP自动生成的归档文件,嘿,presto,您可以回避您的问题,提高可用性,消除原始想法所需的所有复杂混乱,而且它对浏览器更加友好。搜索引擎优化可能也有好处。

例如:

<a href="<?php echo get_term_link( \'videos\', \'cat\' ) ?>">View more Videos</a>
将使用户访问视频类别中的帖子存档,您可以使用该类别设置主题category.php, 甚至category-videos.phparchive.phpSignificantly 更简单,甚至可以通过最小的更改将其转换为小部件或短代码。

复杂的分页警告,您要做的是复杂的,不是复杂的方式,而是笨拙的方式。有一个很好的理由让您不经常看到这一点,当它完成时,它是一个丰富的JS接口,而不是PHP接口。

首先,您需要2个查询,您需要弄清楚如何查询所需内容,我建议使用标记或类别。使用PHP对它们进行排序最终会得到奇怪的结果,例如,如果你获取了20篇帖子,其中19篇在左列,这将很奇怪。

首先,您需要2个查询,而不是1个:

$args1 = [
];
$q1 = new WP_Query( $args1 );

// display left column

$args2 = [
];
$q2 = new WP_Query( $args2 );

// display right column
其次,需要设置分页,URL中需要2个分页字段,并且需要处理两次分页:

// figure out which page we\'re on, 1 if not set
$page1 = ( !empty( $_GET[\'column1\'] )) ? (int)$_GET[\'column1\'] : 1;
$page2 = ( !empty( $_GET[\'column2\'] )) ? (int)$_GET[\'column2\'] : 1;

$args1 = [
    \'posts_per_page\' => 5,
    \'paged\' => $page1
];
$q1 = new WP_Query( $args1 );

// display left column

$args2 = [
    \'posts_per_page\' => 5,
    \'paged\' => $page2
];
$q2 = new WP_Query( $args2 );

// display right column
很好,现在我们有2列,我们可以更改URL参数上的页面,也就是?column1=5&column2=3 分别用于第5页和第3页

但我们没有分页控件!如果我们要9000页呢?我们不能使用标准分页系统,因为我们决定进行复杂的设置,所以我们必须从头开始构建自己的分页系统。

以下是第一列分页,假设有一个简单的下一页和上一页链接:

if ( $page1 > 1 ) {
    ?>
    <a href="?column1=<?php echo $page1-1; ?>&column2=<?php echo $page2; ?>">Previous Page</a>
    <?php
}
?>
<a href="?column1=<?php echo $page1+1; ?>&column2=<?php echo $page2; ?>">Next Page</a>
第二列分页是相同的,但数学在$page2 改为变量。

如果您希望使用可单击的页码分页,这将非常复杂,因为您需要计算出有多少页,通过相关链接循环并打印出每个页码,突出显示当前页面,等等

评论

内联评论和多个评论区域并不是直截了当的,这听起来像是一个噩梦般的用户界面,但question has the answer. 请记住,Stack Exchange有每个问题1个问题的策略,如果这不能满足您的查询,您需要询问后续问题以获取评论。

结论

现在,您已经掌握了做您想做的事情所需的所有信息。我再次建议不要这样做。如果它坏了,调试起来会很麻烦,而且它对用户不友好,这会让访问者望而却步。web上的标准模式是指向更全面的重点归档的链接。多层次的分页只会让人困惑

进一步阅读WP_Query Pagination parameters - WP.org Codex
  • Showing more than one comment section on a page - WP Stack Exchange
  • 结束

    相关推荐

    Pagination issue

    我正在使用一个自定义帖子类型/自定义分类组合,我似乎无法使分页正常工作。我想在页面上添加一个无限卷轴,但我甚至无法显示分页以使无限卷轴工作。下面是我的循环:<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $args = array( \'post_type\' => \'shows\', // it\'s defa