我有一个名为“ visningshus”的自定义帖子类型,还有一个带有该标签的页面。这是(必须)应该做的。

当前,“ http://my-site.com/visningshus”列出了该类型的所有帖子。我想显示具有该永久链接标记的页面。

如何让Wordpress不使帖子类型名称优先,而是使永久链接显示页面?

#1 楼

最简单的方法就是禁用此CPT的存档页面:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);


别忘了之后在“设置>永久链接”处刷新永久链接。

评论


效果很好-但是现在所有以自定义帖子类型名称开头的永久链接都给出404,尽管在wp-admin中它们是正确的,并且似乎没有进行重写。也就是说,所有永久链接在网站上都是正确的,但是所有自定义帖子都给出404。您能帮上忙吗? :)

–亨里克·埃兰森(Henrik Erlandsson)
2014年11月11日15:44



@HenrikErlandsson也许您的帖子类型与页面名称相同。在这种情况下,建议您更改帖子类型名称。示例:自定义帖子类型名称-之前:产品之后:cpt_products。

–布鲁诺·蒙泰罗(Bruno Monteiro)
16年4月6日在17:08

非常聪明。解决了很多问题

–bysanchy
17年4月9日在15:08



#2 楼

我的信誉不高,无法评论@Carl的帖子,但是他的答案是正确的(至少对于这种情况,是保持页面slug和自定义帖子类型slug相同且不使用archive.php文件)

但是他的回答会给分页带来错误。为避免出现分页错误:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');


这将查看分页,获取页码,然后在反面强制其使用带有匹配标签的页面,然后插入页面变量。

除了上面发布的'has_archive' => false,,这还应该实现所需的功能。

如其他人所述,请确保在进行此更改后通过访问“设置”>“永久链接”来刷新重写规则。

希望这对某人有帮助,因为我知道这让我很沮丧真的很长时间。

#3 楼

Tjena Henrik!

我想您需要做的就是向已经创建的Wordpress Rewrite规则添加一个重写规则。将此代码段添加到主题的functions.php中,或将其作为单独的pugin ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);


评论


如果有人使用它,请删除flush_rewrite_rules();您不应该每次都更改init的重写规则。重新加载一次,然后将其删除,或通过转到管理控制台中的永久链接设置手动刷新永久链接,然后单击“保存更改”

– tehlivi
17年6月14日在18:10

在这里所有的答案中,这个对我有用!暴躁

–Pooja Mistry
20年6月11日在16:12

#4 楼

如果您自己注册了帖子类型,则可以在主题或插件中更改存档状态和URL。

'has_archive' => true,在post-type-permalink中启用存档。因此将其更改为

'has_archive' => false,将禁用存档。

'has_archive' => 'custom-slug',将启用自定义slug中的存档(http://my-site.com/custom-slug/) 。

如果插件或主题注册了它,则可以使用krafter禁用它。您还可以对档案使用自定义的条目。 。

#5 楼

我没有解决冲突就解决了它。
创建一个带有visningshus的页面,然后在其中写任何内容。
记下此页面的ID。

创建和自定义可以按照自己喜欢的任何方式使用archive-custom-post-type.php模板(很可能仅使用页面模板),但是将循环部分替换为

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;


然后,当您转到http://my-site.com/visningshus时,您会在正确的url处看到页面管理的内容。

让我知道它的工作原理。

评论


好主意,但这太复杂了。您尝试过我的解决方案吗?

–卡夫纳
14年2月19日在10:32

@kraftner不,我没有。下次再试。谢谢!

– molokom
2014年2月19日上午10:55

这也有一些副作用,例如标题,并且所有内容仍在创建,就好像它是存档页面而不是页面一样。我不建议使用该解决方案。

–卡夫纳
2014-2-19在11:00

如果页面ID更改怎么办?这不安全。

–乔尔·詹姆斯(Joel James)
17年2月6日在7:19

#6 楼

不允许投票,但对于卡尔斯解决方案,请+,register_post_type应该具有
'has_archive' => false


简单。但是,当您遇到分页问题时,请查看

add_rewrite_rule


#7 楼

对我来说,解决此问题的原因是在设置我的自定义帖子类型时将archive设置为false,但同时将Hierarchical设置为false!

#8 楼

这是一种针对所有自定义帖子类型的子句优先于自定义帖子类型内容进行分页的一般解决方案。帖子类型具有archive = false

,最后但同样重要的是转到“ Permalinks设置”页面的“设置”>“ Permalinks”(/ wp / wp-admin / options-permalink.php),并保存当前设置以刷新链接结构。页面。