WordPress博客分页不起作用

10

我仍然卡在这个问题上...

我的 WordPress 博客分页不起作用 - http://www.example.com/news

当您单击不同的页面编号时,它会正确地更新 URL(和页面标题),但不会显示不同的文章。

我尝试过:

  • 禁用所有插件
  • 更改永久链接结构
  • 更改在 设置>阅读 中显示的博客文章数量
  • http://www.example.com/recall-news更改为与帖子类别“新闻”不冲突的其他路径

对我来说没有任何作用。

我看到许多自定义查询的解决方案,但我正在使用 在设置>阅读>帖子页面 中设置的帖子页面,因此我没有编写任何代码来在此页面上显示帖子。

  • 在这种情况下,我应该修改哪个 WordPress 文件以修复博客分页? 我猜我可以在 functions.php 中添加一些内容,但我还没有找到解决方案。

更新:我还没有找到解决方案。 我知道我可以通过编写自己的查询来实现它,但我想坚持使用默认的 WP 博客。


2
这个确切的模板/页面是哪个?另外,请发布您的模板代码。 - Pieter Goosen
你绝对不需要一个自定义查询。但是,我们需要你提供渲染“recall-news”页面的主题模板代码。如果没有它,我们无法进行故障排除或帮助。 - random_user_name
8个回答

3

请查看category.php文件中的WP循环(也称为archive.php)。它必须包含以下内容:

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

并以此结束:

endwhile; endif;

抱歉?你能为我解释一下吗? - cpcdev

2
我已经尝试过“文章页面”,但是没有得到结果。
对我来说,唯一有效的解决方案是使用自定义查询与Page-Navi插件结合使用。
在我的模板中,我有以下代码:
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
        'post_type'         => 'post',
        'orderby'           => 'date',
        'order'             => 'DESC',
        'post_status'       => 'publish',
        'posts_per_page'    => 5,
        'paged'             => $paged,
    );
    $q = new WP_Query( $args );

    if ( $q->have_posts() ) {
        $displaylist = '<div class="list-group">';

        while ( $q->have_posts() ) {
            $q->the_post();

            // build up your entry

            unset( $displayTag );
        }

        $displaylist .= '</div>';

        echo( $displaylist );

        wp_pagenavi( array( 'query' => $q ) );

        wp_reset_postdata();
    }
?>

使用post_per_page来管理每个页面上的条目数量。在循环中,我构建应该显示的条目。


这在我的端上可以工作,当导航到分页搜索结果时,您也可以将其用于搜索页面。 - Capitan Kamote

1

不能保证你的问题与WordPress有关。但是由于你没有提出一个非常具体的问题,我将给你一个非常笼统的答案。这应该帮助你找出问题所在并自行解决。

  1. 查看underscores。下载并查看模板(例如index.phparchive.php等),以查看您是否遗漏了下划线包含的任何内容。下划线的好处在于它是创建正在运行的主题所需的所有基本内容,没有花哨的东西。因此,如果它存在而不在您的代码中,则值得探索。特别注意与have_posts相关的任何代码块。

  2. 可能实际上没有您的主题出现问题。尝试测试另一个主题(比如您已方便下载的下划线主题),以查看它是否具有工作正常的分页功能。如果它能够正常工作,那么您就很幸运...这意味着您只需要深入挖掘一下哪些代码出了问题,而下划线主题是正确的。

  3. 如果您发现问题不在于您的主题,而是在于您的服务器配置上出错,那么从某种意义上说,这也是一种解脱。这意味着您理论上应该能够在其他地方测试您的安装程序或重新安装您的服务器并使其正常工作。在走得太远之前,请尝试简单地重新安装WordPress的版本。谁知道...它可能会起作用。


1
你需要在query_post函数中传递“page”/“paged”变量:
if ( get_query_var('paged') ) {
 $paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
 $paged = get_query_var('page');
} else {
 $paged = 1;
}
query_posts(array('paged' => $paged));
if (have_posts()) : while ( have_posts() ) : the_post(); ?>
<!--Your HTML-->.
<?php endwhile; endif;  wp_reset_query(); ?>

0

你能否尝试使用Wp-Pagenavi来生成分页?这样我们就至少可以检查一下问题是默认分页还是代码中存在一些错误,导致paged变量无法正确填充。


为什么需要一个默认分页插件?the_posts_pagination() 或 get_the_posts_pagination() 已经在核心中可用,还有 paginate_links()。 - Hans Koch
更多的插件会增加页面加载和数据库提取时间...所以如果可能的话,最好使用wp核心方法... - OpenWebWar

0
在您的主题中创建一个名为archive-learning.php的文件。
这意味着post_type是“learning”。

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


<?php
$custom_args = array(
        'post_type'     => 'learning',
        'post_status'   => 'public',
        'orderby'       =>  'date',
        'order'         =>'DESC',    
         'posts_per_page'=>12,//limit 6
         'paged' => $paged
    );
$wp_query = new WP_Query( $custom_args );
$getPosts =  get_posts($custom_args);

?>
<?php if ($getPosts) : ?>
    <?php global $post,$wp_query;?>
    <?php foreach ($getPosts as $post): ?>
    <?php setup_postdata($post);?>
    <?php echo "your content here";?>
    <?php endforeach;?>
     
    <?php
    else :
     
     

    endif;
   ?>
<div class="pagenation"><?php if (function_exists(custom_pagination)) {custom_pagination($wp_query->max_num_pages,"",$paged);} ?></div></div>
    <?php wp_reset_postdata(); ?>

go to file functions.php and create function custom_pagination

function custom_pagination($numpages = '', $pagerange = '', $paged='') {

  if (empty($pagerange)) {
    $pagerange = 2;
  }

  /*
   * This first part of our function is a fallback
   * for custom pagination inside a regular loop that
   * uses the global $paged and global $wp_query variables.
   * 
   * It's good because we can now override default pagination
   * in our theme, and use this function in default queries
   * and custom queries.
   */
  global $paged;
  if (empty($paged)) {
    $paged = 1;
  }
  if ($numpages == '') {
    global $wp_query;
    $numpages = $wp_query->max_num_pages;
    if(!$numpages) {
        $numpages = 1;
    }
  }

  /** 
   * We construct the pagination arguments to enter into our paginate_links
   * function. 
   */
  
  $pagination_args = array(
  'base'           =>add_query_arg('page','%#%'),
  'format'          => 'page/%#%',
  'total'           => $numpages,
  'current'         => $paged,
  'show_all'        => False,
  'end_size'        => 1,
  'mid_size'        => $pagerange,
  'prev_next'       => True,
  'prev_text'       => __('&laquo;'),
  'next_text'       => __('&raquo;'),
  'type'            => 'plain',
  'add_args'        => false,
  'add_fragment'    => ''
);

  $paginate_links = paginate_links($pagination_args);

  if ($paginate_links) {
    echo "<nav class='custom-pagination'>";
      //echo "<span class='page-numbers page-num'>Page " . $paged . " of " . $numpages . "</span> ";
      echo $paginate_links;
    echo "</nav>";
  }

}


0

0

试试这个

    global $wpdb;

    $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
    $limit = 20;
    $offset = ( $pagenum - 1 ) * $limit;
    //$entries = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}design_information LIMIT $offset, $limit" );
     $entries = $wpdb->get_results("Select * From design_information ORDER BY id DESC LIMIT $offset, $limit",ARRAY_A);

echo '<div class="wrap">';
<table class="widefat">
    <thead>
        <tr>
           <th>SNo.</th><th>Layout</th><th>Org Description</th>
        </tr>
    </thead>

    <tbody>
        <?php if( $entries ) { ?>

            <?php
            $count = 1;
            $class = '';
    //echo "<pre>";
    //print_r($entries);
    for($i=0;$i<count($entries); $i++)
    {

$pid=$entries[$i]['id'];
                $class = ( $count % 2 == 0 ) ? ' class="alternate"' : '';
          ?>
            <tr<?php echo $class; ?>>
                <td>
              <?php echo $entries[$i]['id'];
                //echo $count; 
                $count++;?>
          </td>
<td>
      <?php echo $entries[$i]['layout'];?>
  </td>
  <td> 
      <?php echo $entries[$i]['org_description'];?>
  </td>

  </tr>
</table>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接