个性化阅读
专注于IT技术分析

为什么分页不起作用并在WordPress网站上显示404错误?

美好的一天!问题是这样的:当你单击404错误的第2页时, 在模板类别(档案库)中, 分页不起作用。请帮忙不明白怎么解决, 已经全死了

我的循环:

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$arg = array(
  'cat' => get_queried_object_id(), 'post_type'=>'post', 'posts_per_page'=>9, //'order'=>'desc', 'paged' => $paged, );
$query = new WP_query($arg);
if($query->have_posts()) : ?>
<section class="blog">
  <?php
  echo '<div class="row">';
  $i=0;
  $formcreated=false;
  while( $query->have_posts() ) :
    $query->the_post();
    // display post 
   endwhile;
   wp_reset_postdata();
endif;
?>

<div class="pagination">
  <?php
       if (function_exists('custom_pagination')) {
         custom_pagination($query->max_num_pages, "", $paged);
       }
     ?>
   <?php wp_reset_postdata(); ?>
</div>

和我的自定义分页:

function my_post_queries( $query ) {
    // do not alter the query on wp-admin pages and only alter it if it's the main query
    if (!is_admin() && $query->is_main_query()){

        // alter the query for the home and category pages


        if(is_category()){
            $query->set('posts_per_page', 1);
            $query->set('post_type', 'product');
        }

    }
}
add_action( 'pre_get_posts', 'my_post_queries' );

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'            => get_pagenum_link(1) . '%_%', 'format'          => 'page/%#%', 'total'           => $numpages, 'current'         => $paged, 'show_all'        => False, 'end_size'        => 1, 'mid_size'        => $pagerange, 'prev_next'       => True, 'prev_text'       => __('&#60;'), 'next_text'       => __('&#62;'), 'type'            => 'plain', 'add_args'        => false, 'add_fragment'    => ''
  );

  $paginate_links = paginate_links($pagination_args);

  if ($paginate_links) {
    echo "<nav class='custom-pagination'>";
      echo $paginate_links;
    echo "</nav>";
  }

}

#1


由于最近在两个不同的论坛中都提到了这一点, 所以我在回答这个问题。

如果你使用自定义分页, 例如你正在使用的分页似乎来自http://callmenick.com/post/custom-wordpress-loop-with-pagination, 但它也发生在Genesis子主题中, 因为父主题编号分页是什么人。

为什么会显示404页面? callmenick.com和Genesis(genesis_posts_nav)中的Custom分页用于主要查询, 因此, 如果你不同查询的分页位于阅读设置(为主要查询设置)中的每页帖子数之下, 在第2页上获取404。

WordPress网站上的每个前端页面请求都会产生一个主查询。 WordPress决定加载的模板基于该主查询的结果(你可以通过查看”操作参考”页面来查看WordPress执行这些操作的顺序)。尽管实际上你从未输出过该查询的结果, 但它仍在运行, 并且对于分页归档, 如果你尝试将该分页用于其他查询, 则这是一个问题。 -米洛https://wordpress.stackexchange.com/a/120963/64742

你不会看到太多这个问题, 因为许多人只是为该循环建立分页, 而不是从functions.php文件或父主题重新使用它。你可以在这里了解到:https://codex.wordpress.org/Function_Reference/paginate_links

让我们从顶部开始, 每当编写代码时, 在wp-config.php中打开调试功能


我的cpt存档中有一个基本的自定义循环。

archive-product.php

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

  $product_args = array(
      'post_type' => 'product', 'posts_per_page' => 2, //the same as the parse_query filter in our functions.php file
      'paged' => $paged, 'page' => $paged
    );

  $product_query = new WP_Query( $product_args ); ?>

  <?php if ( $product_query->have_posts() ) : ?>

    <!-- the loop -->
    <?php while ( $product_query->have_posts() ) : $product_query->the_post(); ?>
      <article class="loop">
        <h3><?php the_title(); ?></h3>
        <div class="content">
          <?php the_excerpt(); ?>
        </div>
      </article>
    <?php endwhile; ?>
    <!-- end of the loop -->


    <!-- pagination here -->
    <?php
       if (function_exists( 'custom_pagination' )) :
          custom_pagination( $product_query->max_num_pages, "", $paged );
      endif;
   ?>


  <?php wp_reset_postdata(); ?>

  <?php else:  ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
  <?php endif; ?>

在你的functions.php文件中:

了解条件。 https://codex.wordpress.org/Conditional_Tags https://codex.wordpress.org/Function_Reference/is_post_type_archive

/** 
 * Posts per page for CPT archive
 * prevent 404 if posts per page on main query
 * is greater than the posts per page for product cpt archive
 *
 * thanks to https://sridharkatakam.com/ for improved solution!
 */

function prefix_change_cpt_archive_per_page( $query ) {

    //* for cpt or any post type main archive
    if ( $query->is_main_query() && ! is_admin() && is_post_type_archive( 'product' ) ) {
        $query->set( 'posts_per_page', '2' );
    }

}
add_action( 'pre_get_posts', 'prefix_change_cpt_archive_per_page' );

/**
 * 
 * Posts per page for category (test-category) under CPT archive 
 *
*/
function prefix_change_category_cpt_posts_per_page( $query ) {

    if ( $query->is_main_query() && ! is_admin() && is_category( 'test-category' ) ) {
        $query->set( 'post_type', array( 'product' ) );
        $query->set( 'posts_per_page', '2' );
    }

}
add_action( 'pre_get_posts', 'prefix_change_category_cpt_posts_per_page' );


/**
*
* custom numbered pagination 
* @http://callmenick.com/post/custom-wordpress-loop-with-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'            => get_pagenum_link(1) . '%_%', '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>";
  }

}

#2


在wp-include / functions.php上

添加这些行

function my_pagination_rewrite() {
 add_rewrite_rule('([a-z]+)/page/?([0-9]{1, })/?$', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
}


add_action('init', 'my_pagination_rewrite');
赞(0)
未经允许不得转载:srcmini » 为什么分页不起作用并在WordPress网站上显示404错误?

评论 抢沙发

评论前必须登录!