还有一个:在WordPress中不支持分页的自定义帖子类型

时间:2016-08-03 作者:HeyBlondie

首先;在过去的2-3周里,我到处寻找我遇到的问题的解决方案,但我所做的一切都无法使显示帖子网格的帖子的分页工作正常。我会在这篇文章中包括更多的链接(包括有问题的网站),但我只能发布2个URL。

(使用的主题是Divi,由优雅的主题…子主题使用)

So:
我已经创建了一个CPT,并且正在使用高级自定义字段(ACF)来启用一个简单的管理页面,以便用户输入详细信息(针对每个新帖子)。这将创建CPT的新职位。

使用此CPT创建的帖子将自动以网格格式列在“旅游博客”页面上。(…已删除网站URL…)

当选择浏览旅游博客页面中的帖子时,它会显示一个介绍页面[帖子],其中显示了所有博客帖子的网格,这些帖子的类别与该页面(旅游)相关,而不是CPT。这是我想要分页的页面,这些页面就是问题所在。

创建CPT和显示立柱网格的代码如下:http://pastebin.com/mM3XPUHM

这一页(在我读过的许多其他页面中)似乎是我能找到的最好的资源,但也许有什么我不明白的?How to fix pagination for custom loops?

Maybe some useful info
-显示要分页的帖子网格的页面是帖子,而不是页面(参考WP术语)

显示的立柱网格(分页不起作用)不属于CPT。它们按照相关类别显示-ACF变量

当鼠标指针悬停在“旧帖子”链接上时,url会显示并添加“/页/2/”,但单击时,会显示第一个初始页

如果测试,“max\\u num\\u pages”变量将返回一个大于1的数字,因此需要显示大量页面

我无法在地址栏中手动输入添加了/page/2/的URL。显示初始页面。

如果我为帖子网格输入一个固定类别(与ACF变量相反),除了在每页上显示一个相同类别的帖子网格外,没有任何区别

如果我在代码中输入“paged”的数字。例如,“$args[\'paged\']=3”将实际显示第三页

--在前面提到的测试中,“更新帖子”的链接仍然不会显示。仅显示“旧帖子”。

我意识到这可能是一篇相当长的帖子,可能还有一些重要的细节我没有提到,但希望有人能提出一些建议。

谢谢

Progress Edit:

在阅读WP codex for pagination 它建议将permalinks设置为默认值,因此我将其设置为plain(我确实选择了“Post Name”),分页实际上可以工作。我更喜欢在永久链接中使用“Post name”,但希望这有助于查找错误。

2 个回复
最合适的回答,由SO网友:HeyBlondie 整理而成

这个问题终于为我解决了。简而言之,解决方案发布在此处:https://wordpress.org/support/topic/url-rewriting-on-custom-post-type/#post-7720726

。。。这是添加到函数中的最终代码。子主题中的php文件:

function fix_request_redirect( $request ) {
    if ( isset( $request->query_vars[\'post_type\'] )
         && \'custom_type\' === $request->query_vars[\'post_type\']
         && true === $request->is_singular
         && - 1 == $request->current_post
         && true === $request->is_paged
    ) {
            add_filter( \'redirect_canonical\', \'__return_false\' );
    }

    return $request;
}
add_action( \'parse_query\', \'fix_request_redirect\' );
…\'“custom\\u type”将替换为自定义帖子类型的实际标题。

感谢您为帮助bynicolas所做的努力

SO网友:bynicolas

我猜您将查询与分页逻辑混淆了。你是说如果get_query_var(\'paged\')false 收到get_query_var(\'page\') 但你是NOT 在静态首页上,然后else进入并设置$args[\'paged\'] = 1 所以基本上总是给你循环中的第一组帖子。

我会尝试以这种方式编写查询。

$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1; // If we have a \'paged\' parameter, set $paged to that value, if not set it to 1

$args = array(
   \'post_type\' => \'post\',
   \'posts_per_page\' => 6,
   \'paged\' => $paged, // Our current paged parameter set above.
   \'order\' => \'desc\',
   \'orderby\' => \'date\',
   \'tax_query\' => array(
       array(
           \'taxonomy\' => \'category\',
           \'field\'    => \'slug\',
           \'terms\'    => get_field(\'category_to_display\'), // category from the Advanced Custom Field variable
       ),
   ),
);


$the_query = new WP_Query( $args );
另外,我注意到你正在将下一篇文章设置为旧文章

next_posts_link( \'« Older Posts\' );
将以前的帖子转换为较新的帖子

previous_posts_link( \'Newer Posts »\' );
你不想反过来吗?但可能只有我没有正确地思考这个问题!

相关推荐

change pagination url

目前,我的分页页面URL为:http://www.example.com/category_name/page/2但我需要将此URL结构更改为:http://www.example.com/category_name/?page=2等有什么解决方案吗?