WordPress的分页不工作(Wordpress Pagination not working)

2019-08-03 17:05发布

我曾尝试多种解决方案,但它不工作。

当我去到/页/ 2,这是行不通的。

我在我的主题index.php文件执行自定义查询。

if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
    $paged = get_query_var('page');
} else {
    $paged = 1;
}

$args = array(
    'post_type' => array('post', 'music', 'videos'),
    'post_status' => 'publish',
    //'meta_key' => 'featured',
    //'meta_value' => '1',
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged
);

query_posts($args);

这里是链接到我的网站: 我的网站主页

此页面无法正常工作(投掷404) - 网页,其中不工作 (格式- mywebsite /页/ 2 /)

刚刚意识到这页2个工程- 页这是工作 (格式- mywebsite.com/?page=2)

Answer 1:

我有同样的问题,这对我来说固定的一切。 这使我对index.php的分页以及我page.php文件与漂亮的永久链接。

HTML / PHP:

<?php
    //Fix homepage pagination
    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } else if ( get_query_var('page') ) {$paged = get_query_var('page'); } else {$paged = 1; }

    $temp = $wp_query;  // re-sets query
    $wp_query = null;   // re-sets query
    $args = array( 'post_type' => array('post', 'music', 'videos'), 'orderby'=>'date', 'order'=>'DESC', 'posts_per_page' => 10, 'paged' => $paged);
    $wp_query = new WP_Query();
    $wp_query->query( $args );
    while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

<!--your loop stuff here -->

<?php endwhile; ?>
<nav>
   <?php paginate(); ?>
   $wp_query = null;
   $wp_query = $temp; // Reset
</nav>

这让几件事情。 一则检查您的家,网页,或单并告诉$分页变量如何反过来反应。 它还可以让你自定义文章类型查询您的分页。 此外,通过不使用query_post你避免一些非常时髦的东西使用时,你有时会。 所述PAGINATE(); 是我们在现在带来一个自定义函数:

里面你的functions.php

function paginate() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;

$pagination = array(
    'base' => @add_query_arg('page','%#%'),
    'format' => '',
    'total' => $wp_query->max_num_pages,
    'current' => $current,
    'show_all' => true,
    'type' => 'list',
    'next_text' => '&raquo;',
    'prev_text' => '&laquo;'
    );

if( $wp_rewrite->using_permalinks() )
    $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );

if( !empty($wp_query->query_vars['s']) )
    $pagination['add_args'] = array( 's' => get_query_var( 's' ) );

echo paginate_links( $pagination );
}

这个最初来自http://bavotasan.com/2011/simple-pagination-for-wordpress/我稍微改装它来获得分页到主页上的工作。

这又做几件事情。 它进行分页您的页面每个页面得到它自己的链接(我觉得这很好),它也重新写入的网址,以允许相当永久链接。 如果您检查链接,变量的“正在代替“分页”在这一部分使用。 我取代了“S”与“分页”和一切都工作在我结束。

分页的可选择定型

ul.page-numbers {
    margin: 20px 0 10px;
    width: 100%;
    padding: 0;
    font-size: 12px;
    line-height: normal;
    clear: both;
    float: left;
}

ul.page-numbers li {
       float: left;
    }

ul.page-numbers a,
ul.page-numbers span {
    border-radius: 3px;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    background: -webkit-gradient(linear, left top, left bottom, from(#E4E3E3), to(#FFFFFF));
    background: -moz-linear-gradient(top,  #E4E3E3,  #FFFFFF);
    filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#E4E3E3', endColorstr='#FFFFFF');
    padding: 3px 4px 2px 4px; 
    margin: 2px;
    text-decoration: none;
    border: 1px solid #ccc;
    color: #666;
}

ul.page-numbers a:hover,
ul.page-numbers span.current {  
    border: 1px solid #666;
    color: #444;
}

编辑我意识到事后说首页分页会点击页面标签之一后打破。 我已经通过更换条件语句,并把这个在其位置固定这一点。 我已经更新了我上面的代码为好。

$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );


Answer 2:

我有时有麻烦分页到正常工作为好。 尝试使用下面的查询,看看是否有帮助。 我刚加入基本一行代码,改变您的查询不使用$args变量。

<?php

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts( array(
    'post_type' => array(
        'post',
        'music',
        'videos',
    ),
    'post_status' => 'publish',,
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged )
);

if (have_posts()) : while (have_posts()) : the_post();

?> 

    // Display your content here    

    <?php the_title ?>

    <?php the_content(); ?>

<?php endwhile; endif; ?>


Answer 3:

这里有几件事情,永远不会改变您的主页上或任何存档页的自定义查询主查询。 你永远有分页的麻烦。

另外,不要使用query_posts创建自定义查询。 我的重点,就像从来没有。

注:此功能并不意味着通过插件或主题中使用。 作为后来解释,有更好,更高性能的选项来改变主查询。 query_posts()是由过度与查询的新实例替换它来修改页面的主查询简单化和问题的方式。 这是一种低效(重新运行SQL查询)和(与岗位分页打交道时,特别是经常)在某些情况下会彻底失败。

如果你需要去改变网页或任何存档页面,使用pre_get_posts`在执行之前更改/修改主查询。 这是改变主查询的正确方法。 通过改变执行前主查询,你必须与分页没有问题。

pre_get_posts可以在有条件的标签结合使用,以针对特定的网页。 看看提供的例子的链接。



Answer 4:

我一直在努力,现在这个问题有一段时间,它把我们的WordPress并没有设置为我所需要的领域之一, max_num_pages

所以我设置循环内该变量。 下面是我的示例代码。

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array('post_type' => 'cpt', 'paged'=>$paged, 'posts_per_page' => 3);
$loop = new WP_Query($args);
$GLOBALS['wp_query']->max_num_pages = $loop->max_num_pages; // This is the line that did the magic for me.

经过进一步的阅读中,我发现了这一点;

  1. 在single.php中,singular.php和其他单一视图模板: (int) $page是该职位的页面,通过查询VAR页中指定: get_query_var( 'page' ) ;
  2. 在各种archive.php和类似存档/后类型列表视图模板: (int) $paged是全局变量包含帖子的列表的页面数量(如档案)。

这意味着,如果你在一个页面模板(这是一个单一的视图模板),并使用循环是,你需要设置这个变量。



文章来源: Wordpress Pagination not working