自定义帖子类型不接受页面变量

Posted

技术标签:

【中文标题】自定义帖子类型不接受页面变量【英文标题】:Custom Post Type Not Accepting Page Variable 【发布时间】:2014-05-21 15:29:40 【问题描述】:

我使用 PODS 创建了一个自定义帖子类型 该 URL 最终为:

http://example.com/dj/dj-name

DJ 有一个作者字段,我用它来查询 DJ 的帖子。

next_posts_link() 的 url;最终变成 /dj/dj-name/page/2 正如人们所期望的那样。

点击链接后,wordpress 似乎忽略了 /page/2 而只是重定向回 /dj/dj-name

我的永久链接结构是:http://example.com/sample-post/

当我使用默认的永久链接结构 /?dj=dj-name&paged=2 时,它可以正常工作。

有什么想法吗?

【问题讨论】:

$paged的值是多少? @celeriko 它永远不会到达那一点,因为 wordpress 重定向回 /dj/dj-name 它确实到达了那个点,否则查询将不会执行并且页面上不会显示任何内容。 @celeriko 如果我在 /dj/dj-name 上,那就到此为止了...但是当我转到 /dj/dj-name/page/2 时,它并不是在显示来自 /dj/dj-name 的数据实际上是在将我重定向到 url /dj/dj-name ... 这更有意义吗? 【参考方案1】:

在您的 php 文件中,您是否将 $paged 分配给任何内容? View Pagination Codex

在您的查询上方,可能就在您的get_header() 下方,您需要添加如下内容:

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

如果这不起作用,您可以尝试再次保存您的永久链接(设置 -> 永久链接 -> 保存永久链接)。这将刷新您当前的永久链接结构。

最后,如果您已经创建了一个名为“dj-name”的页面,您可能会遇到问题,因为 WordPress 无法区分名为 page/2/ 的子页面和分页链接 page/2/

【讨论】:

是的,我确实把它放在了顶部。问题再次是 wordpress 把我送回 /dj/dj-name 好像 /dj/dj-name/page/2 是一个无效的 URL 如果你把<?php next_posts_link(); ?>移到endif;之前 正在生成正确的链接。当我查看源代码时单击它。点击后,wordpress 重定向我回到 /dj/dj-name。 您是否尝试在 endif 之前移动它?它可能正在生成正确的链接,但不是相应的查询,因为它是自定义的。 是的,结果还是一样。即使我在 URL 栏中键入正确的。它重定向回来。【参考方案2】:

分页仅适用于归档页面,例如 index.php、category.php、archive-posttype.php 等。

你可以让它在single.php或类似页面上工作,但你需要劫持内置的重定向功能,见下文...

function dj_redirect_hack($url) 
    if ( is_single() and get_post_type() == 'dj' ) $url = false;
    return $url;

add_filter('redirect_canonical','dj_redirect_hack');

【讨论】:

以上是关于自定义帖子类型不接受页面变量的主要内容,如果未能解决你的问题,请参考以下文章

WP 冲突自定义帖子类型链接到相同的页面名称

自定义帖子类型的 WooCommerce 产品

自定义帖子类型等效于 Wordpress 中的“帖子页面”设置

自定义帖子类型 slug 重复

带有自定义 slug 的 wordpress 自定义帖子类型并获取变量

Wordpress - 自定义帖子类型存档页面