【问题标题】:Wordpress pagination break on homepage主页上的WordPress分页中断
【发布时间】:2014-06-17 04:39:34
【问题描述】:

我正在尝试让我的主页 (home.php) 显示来自自定义帖子类型的一些帖子缩略图,并对所有这些内容进行分页。

第一页可以正常使用,但是当我尝试进入第二页时它不起作用。

如果我将以下代码添加到我的functions.php中

function homepage_custom( $query ) 
{
    if ($query->is_home() && $query->is_main_query()) 
    {
        $query->set('post_type', array( 'custom' ));
    }
}
add_action( 'pre_get_posts', 'homepage_custom' );

我没有收到任何帖子。

在不检查主查询的情况下重试

function homepage_custom( $query ) 
{
    if ($query->is_home()) 
    {
        $query->set('post_type', array( 'custom' ));
    }
}
add_action( 'pre_get_posts', 'homepage_custom' );

我得到了第一个帖子(我在每页上显示 16 个)。当我转到第二页时,URL 显示“localhost/page/2”,但我看到了相同的 16 个帖子。将永久链接重置为默认值会得到相同的结果。

如果我尝试直接从 home.php 查询:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts(array("post_type" => "custom", "paged" => $paged));

我看到前 16 个,我在第 2 页得到 404。同样,重置永久链接会产生相同的结果。

  • 我有 17 个使用这种自定义类型的帖子。
  • 每页显示 16 个我得到 2 个页面看到相同的帖子,每页显示 5 个我得到 4 个页面看到相同的帖子。

     echo get_query_var( 'paged' ); 
    

这每次都输出 0。

【问题讨论】:

    标签: php wordpress pagination


    【解决方案1】:

    尝试使用此代码:

    $pager_id = get_query_var('paged');
    $postsPerPage = 5;
    
    if($pager_id != 0) {
        $search_args = array( 'post_type' => 'custom', 'post_status' => 'publish', 'posts_per_page' => $postsPerPage, 'paged' => $pager_id);
    } else {
        $search_args = array( 'post_type' => 'custom', 'post_status' => 'publish', 'posts_per_page' => $postsPerPage);
    }
    
    $results = new WP_Query( $search_args );
    

    【讨论】:

    • 使用您的代码,分页箭头不再显示。如果我尝试通过 url ('localhost/page/2') 访问第 2 页仍然给我一个 404。将变量 $results 的名称更改为 $wp_query 解决了这个问题,但分页也不起作用
    • 如果您使用简单的分页插件:wordpress.org/plugins/tw-pagination 然后您可以将此代码放在循环之后:if(function_exists('tw_pagination')) tw_pagination($results, 'range=4&anchor=2&nextpage=Next&previouspage=Previous');
    • 确实解决了分页箭头的问题,但我还看不到第 2 页
    • 您有指向您网站的链接吗?我需要更多信息。
    • 我在本地主机上运行它,我会尝试把它放到网上。还有其他信息可以告诉你吗?
    【解决方案2】:

    我猜我找到了。

    在同一页面中,我必须显示两种不同的自定义帖子类型。主要区域显示一种帖子类型,每页 16 个。另一个用于填充侧边栏中的列表。

    使用这段代码我改变了主查询

    function homepage_custom( $query ) 
    {
        if ($query->is_home() && $query->is_main_query()) 
        {
            $query->set('post_type', array( 'custom' ));
        }
    }
    add_action( 'pre_get_posts', 'homepage_custom' );
    

    但是当我在 home.php 中使用以下内容时

    get_side_bar();
    

    主查询以某种方式被忽略了,这就是为什么我在检查主查询时一无所获。如果没有主查询检查,我总是在搜索我的自定义帖子类型,它适用于前 16 个帖子,然后来自侧栏的查询以某种方式破坏了它,它失去了要显示的帖子的参考,我结束了无论页面如何,都一样。

    使用 wp_reset_query() 方法,从 sidebar.php 中删除此查询或使用循环遍历局部变量的 WP_query 实例可以解决问题。

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多