我有一个名为“ visningshus”的自定义帖子类型,还有一个带有该标签的页面。这是(必须)这样的。
当前,“ http://my-site.com/visningshus ”列出了该类型的所有帖子。我想显示具有该永久链接条的页面。
如何使Wordpress不使帖子类型名称优先,而是使永久链接显示页面?
我有一个名为“ visningshus”的自定义帖子类型,还有一个带有该标签的页面。这是(必须)这样的。
当前,“ http://my-site.com/visningshus ”列出了该类型的所有帖子。我想显示具有该永久链接条的页面。
如何使Wordpress不使帖子类型名称优先,而是使永久链接显示页面?
Answers:
最简单的方法就是禁用此CPT的存档页面:
register_post_type( 'visningshus',
array(
[...]
'has_archive' => false,
[...]
)
);
之后不要忘记在“设置>永久链接”中刷新永久链接。
我的信誉不高,无法评论@Carl的帖子,但他的答案是正确的(至少对于这种情况,页面页眉和自定义帖子类型页眉保持相同并且不使用archive.php文件)
但是他的回答会给分页带来错误。为避免分页错误:
add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');
这将查看分页,获取页码,然后在反面强制其使用具有匹配块的页,然后插入page变量。
除了'has_archive' => false,
上面发布的内容之外,这还应该实现所需的功能。
如其他人所述,请确保在进行此更改后通过访问“设置”>“永久链接”来刷新重写规则。
希望这对某人有帮助,因为我知道这困扰了我很长时间。
Tjena Henrik!
我认为您需要做的就是将重写规则添加到已创建的Wordpress重写规则中。将此代码段添加到主题的functions.php中,或将其作为单独的pugin ...
add_action('init', function () {
add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
flush_rewrite_rules();
}, 1000);
flush_rewrite_rules();
您不应该init
每次都更改重写规则。重新加载一次,然后将其删除,或者通过转到管理控制台中的永久链接设置手动刷新永久链接,然后单击“保存更改”
我没有解决冲突就解决了它。创建一个包含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处看到由页面管理的内容。
让我知道它有效。
不允许投票,但是对于卡尔斯解决方案,+应当为register_post_type
'has_archive' => false
简单。但是,当您遇到分页问题时,请看一下
add_rewrite_rule
修复我的问题是,在设置我的自定义帖子类型时将archive设置为false,但同时将Hierarchical设置为false!
这是一个通用解决方案,用于对任何自定义帖子类型的子句优先于自定义帖子类型的内容进行分页。
// prioritize pagination over displaying custom post type content
add_action('init', function() {
add_rewrite_rule(
'(.?.+?)/page/?([0-9]{1,})/?$',
'index.php?pagename=$matches[1]&paged=$matches[2]',
'top'
);
});
除了添加此代码段外,您还应确保自定义帖子类型具有 archive = false
最后但同样重要的是,转到“永久链接”设置页面的“设置”>“永久链接”(/wp/wp-admin/options-permalink.php),并保存当前设置以刷新页面上的链接结构。