对自定义POST类型循环进行分页

时间:2018-02-20 作者:aitor

我读了很多关于这个话题的问题。他们都没有解决我的问题。

Poblem: 分页显示在第1页,但第2页返回404。

查询和循环位于首页。php:

// WP_Query arguments
$args = array(
  \'post_type\'              => \'trabajo\',
  \'posts_per_page\'         => \'2\',
  \'paged\'                  => ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1,
);

// The Query
$trabajo_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $trabajo_query;


// The Loop
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();

$wp_query = NULL;
$wp_query = $temp_query;  // Reset

3 个回复
最合适的回答,由SO网友:aitor 整理而成

我在这里找到了最终答案:https://wordpress.stackexchange.com/a/217534/77722

首页的第2页是从主查询中分页,而不是从我的自定义查询中分页。

我采取了以下行动:

1. To change name of front-page.php to index.php 为了在每次加载页面时获取主查询(即使分页时也是如此)

2. To change main query with pre_get_posts 为了显示我的CPT帖子:

add_action( \'pre_get_posts\', function ( $q ) {
    if (    $q->is_home() && $q->is_main_query() ) {
        $q->set( \'posts_per_page\', 1 );
        $q->set( \'post_type\', \'trabajo\');
    }
});

3. Do a normal loop in the index.php:

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();
工作完美!

SO网友:aitor

我在这里找到了一个解决方法:Custom post type pagination 404 fix?

因为我不明白,所以我不认为这个问题已经解决了。对此的任何解释都将不胜感激。

我必须一起做两个动作:

设置1 管理>阅读仪表板中的帖子限制

  • 添加此功能:
    1. add_action( \'parse_query\',\'changept\' );
      function changept() {
          if( !is_admin() )
              set_query_var( \'post_type\', array( \'post\', \'trabajo\' ) );
          return;
      }
      
      这是有效的,但我不知道会有什么副作用。

    SO网友:Bhumi champaneria

    将此代码放入函数中。php文件

        function pagination($pages = \'\', $range = 1) {
            $showitems = ($range * 3) + 1;
    
            global $paged;
            if (empty($paged))
                $paged = 1;
    
            if ($pages == \'\') {
                global $wp_query;
                $pages = $wp_query->max_num_pages;
                if (!$pages) {
                    $pages = 1;
                }
            }
    
            if (1 != $pages) {
                echo "<div class=\\"gallery-pagination\\">";
                echo \'<ul class="pagination">\';
    //        if ($paged > 2 && $paged > $range + 1 && $showitems < $pages)
    //            echo "<a href=\'" . get_pagenum_link(1) . "\'>&laquo; First</a>";
                if ($paged > 1 && $showitems < $pages)
                    echo "<a href=\'" . get_pagenum_link($paged - 1) . "\'> << </a>";
    //        echo \'<ul class="pagination">\';
                for ($i = 1; $i <= $pages; $i++) {
    
                    if (1 != $pages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $pages <= $showitems )) {
                        echo ($paged == $i) ? "<li class=\'active\'><a href=\'javascript:void(0)\'>" . $i . "</a></li>" : "<li class=\'inactive\'><a href=\'" . get_pagenum_link($i) . "\'>" . $i . "</a></li>";
                    }
                }
    
                if ($paged < $pages && $showitems < $pages)
                    echo "<a href=\\"" . get_pagenum_link($paged + 1) . "\\"> >> </a>";
                echo \'</ul>\';
    
                echo "</div>\\n";
            }
        }
    
    将此代码放在您想要的自定义帖子类型页面中。

    <?php
                // Get a list of categories
                $paged = ( get_query_var(\'paged\') ) ? absint(get_query_var(\'paged\')) : 1;
                $args = array(
                    \'post_type\' => \'post_gallery\',
                    \'posts_per_page\' => 9,
                    \'order_by\' => \'date\',
                    \'order\' => \'ASC\',
                    \'paged\' => $paged,
                );
    
                $new_query = new WP_Query($args);
    //             print_r($new_query);
                ?>
    <?php if (function_exists("pagination")) { ?>
                    <?php pagination($new_query->max_num_pages); ?>
                <?php } ?>
    

    结束

    相关推荐

    Pagination reset problem

    我需要修复此网页。如果您想查看代码,请附上此页。当用户做出选择时,每个选项卡上的分页不会重置为1。这需要在他们单击选项卡时重置,如果要返回结果,分页显示为1。用户必须仍然能够通过url直接访问页面,即:http://thedemonsjumble.com/pcdev/archives/category/uncategorised/page/3/#latest有没有人对如何着手解决这个问题有什么想法。任何hep都将不胜感激。亲切的问候更改选项卡的链接:<div class=\"container\"&