Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么分页不起作用并且在wordpress站点上出现404错误?_Php_Wordpress_Pagination_Wordpress Theming_Custom Wordpress Pages - Fatal编程技术网

Php 为什么分页不起作用并且在wordpress站点上出现404错误?

Php 为什么分页不起作用并且在wordpress站点上出现404错误?,php,wordpress,pagination,wordpress-theming,custom-wordpress-pages,Php,Wordpress,Pagination,Wordpress Theming,Custom Wordpress Pages,你好!问题在于:在模板类别(归档)中,当您单击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, //

你好!问题在于:在模板类别(归档)中,当您单击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>";
  }

}

和我的自定义分页:

<?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>";
  }

}
function my\u post\u查询($query){
//不要在wp admin页面上更改查询,仅当它是主查询时才进行更改
如果(!is_admin()&&$query->is_main_query()){
//更改主页和类别页面的查询
如果(是_category()){
$query->set('posts\u per\u page',1);
$query->set('post_type','product');
}
}
}
添加操作('pre_get_posts'、'my_post_querys');
函数自定义分页($numpages='',$pagerange='',$paged=''){
if(空($pagerange)){
$pagerange=2;
}
/**
*我们功能的第一部分是回退
*用于常规循环内的自定义分页,该循环
*使用全局$paged和全局$wp_查询变量。
*
*这很好,因为我们现在可以覆盖默认分页
*并在默认查询中使用此函数
*和自定义查询。
*/
全球$paged;
如果(空($paged)){
$paged=1;
}
如果($numpages==''){
全局$wp_查询;
$numpages=$wp\u query->max\u num\u页面;
如果(!$numpages){
$numpages=1;
}
}
/**
*我们构造分页参数以进入分页链接
*功能。
*/
$pagination_args=数组(
'base'=>get_pagenum_link(1)。'%\%',
'格式'=>'第/%#%'页,
“总计”=>$numpages,
“当前”=>$paged,
“全部显示”=>False,
“结束大小”=>1,
“中等大小”=>$pagerange,
“上一步”=>正确,
"上一篇文字"=>("60),,
“下一个文本”=>”>;),
'类型'=>'普通',
'add_args'=>false,
“添加片段”=>“
);
$paginate_links=paginate_links($pagination_args);
如果($paginate_链接){
回声“;
echo$paginate_链接;
回声“;
}
}

由于这一点最近在两个不同的论坛上出现,我现在回答这个问题

如果您使用自定义分页,例如您正在使用的分页,它似乎来自Genesis子主题,但也会发生,因为父级编号的分页是人们需要的

为什么会有404页?callmenick.com和Genesis(Genesis_posts_nav)中的自定义分页是针对主查询的,因此如果您的不同查询的分页是在您的阅读设置(为主查询设置)中每页的帖子下,然后你会在第2页看到404

WordPress站点上的每个前端页面请求都会生成一个主页面 查询WordPress决定加载的模板基于 主查询的结果(您可以看到WordPress的操作顺序 通过查看“操作参考”页面了解这些内容)。尽管 事实上,您从未输出该查询的结果,它仍在运行, 对于分页档案,如果您 尝试将该分页用于其他查询。 -Milo

您不会经常看到这个问题,因为许多人只是为该循环构建分页,而不是从functions.php文件或父主题重新使用它。您可以在这里了解:

让我们从头开始,无论何时编写代码,都要在wp-config.php中启用调试


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

archive-product.php

/**
*CPT存档的每页帖子
*防止在主查询上每页发表404篇文章
*大于产品cpt存档的每页文章数
*
*多亏了https://sridharkatakam.com/ 改进的解决方案!
*/
功能前缀\u更改\u cpt\u存档\u每页($query){
//*对于cpt或任何post类型的主存档
如果($query->is_main_query()&&!is_admin()&&is_post_type_归档('product')){
$query->set('posts_per_page','2');
}
}
添加操作('pre_get_posts','prefix_change_cpt_archive_per_page');
/**
* 
*CPT存档下类别(测试类别)的每页帖子
*
*/
功能前缀\u更改\u类别\u cpt\u每页发布($query){
如果($query->is_main_query()&&!is_admin()&&is_category('testcategory')){
$query->set('post_type',数组('product');
$query->set('posts_per_page','2');
}
}
添加操作('pre_get_posts'、'pre_change_category_cpt_posts_per_page');
/**
*
*自定义编号分页
* @http://callmenick.com/post/custom-wordpress-loop-with-pagination
* 
*/
函数自定义分页($numpages='',$pagerange='',$paged=''){
if(空($pagerange)){
$pagerange=2;
}
/**
*我们功能的第一部分是回退
*用于常规循环内的自定义分页,该循环
*使用全局$paged和全局$wp_查询变量。
* 
*这很好,因为我们现在可以覆盖默认分页
*并在默认查询中使用此函数
*和自定义查询。
*/
全球$paged;
如果(空($paged)){
$paged=1;
}
如果($numpages==''){
全局$wp_查询;
$numpages=$wp\u query->max\u num\u页面;
如果(!$numpages){
$numpages=1;
}
}
/** 
*我们构造分页参数以进入分页链接
*功能。
*/
$pagination_args=数组(
'base'=>get_pagenum_link(1)。'%\%',
'格式'=>'第/%#%'页,
“总计”=>$numpages,
“当前”=>$paged,
“全部显示”=>False,
“结束大小”=>1,
“中等大小”=>$pagerange,
“上一步”=>正确,
“上一个文本”=>“«;”,
“下一个文本”=>“»;”,
“类型”
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');