多年来,我一直使用以下技术来添加/news
我的帖子URL的前缀。我在functions.php
自定义插件的:
function my_change_post_object() {
global $wp_post_types;
$post = &$wp_post_types[\'post\'];
$post->has_archive = \'news\';
$post->rewrite = array(
\'slug\' => \'news\',
\'with_front\' => FALSE,
);
}
add_action( \'init\', \'my_change_post_object\' );
以上基本上允许您触发
archive.php
浏览到时的模板
/news
在网站上。
然而,自从我最近升级到4.9以来,这个功能已经停止正常工作。我仍然可以浏览到/news
URL并查看archive.php
模板,但是,当我登录到管理员,然后在帖子部分下,我无法再查看帖子。我只能查看/修改类别和标记。此外,评论部分也没有任何子菜单。
我的代码现在似乎在WordPress本身中引发了一些安全/权限问题,我不再具有某些权限(我以管理员角色登录)。
当我禁用代码时,管理员工作正常,但浏览到/news
结果为404
. 然而,直接浏览帖子页面是可行的。
我试图删除上述代码,只是将永久链接结构设置为自定义URL,/news/%postname%/
, 但这会导致404
浏览到时/news
.
如何触发archive.php
浏览到时的模板/news
URL?
SO网友:Kyle
以下是我的解决方案,无需更改post对象:
添加新的重写规则,如果需要,请查找此规则:
add_rewrite_rule("^news/?$", "index.php?post_type=post&category_name=news", "top");
添加category\\u name=news会触发存档。要使用的php文件。是的,您需要将类别新闻添加到每篇文章中,但如果您在写作设置中将新闻设置为默认类别,这并没有什么大不了的。
更改存档后链接:
function my_post_archive_link( $link, $post_type ) {
if ( $post_type == \'post\' ) {
$link = site_url( \'/news/\' );
}
return $link;
}
add_filter( \'post_type_archive_link\', \'my_post_archive_link\', 10, 2 );
这是我想到的最好的解决方案,无需破解post对象或创建新的自定义post类型。