我有一个带有自定义类型(位置)的 WordPress 安装,它会生成此永久链接结构:
http://example.com/places/the-first-site/
我想像这样展示我的所有网站:
http://example.com/places/visit-the-first-site-and-enjoy/
其中“访问”和“并享受”始终是那些特定的词(常量)。
更好的是,我想将我拥有的自定义分类法(年份)作为元数据
地点/参观第一个地点并享受 1985/
我可以访问数据库并修改所有帖子的帖子名称,但我也必须对新帖子执行此操作,并且我正在寻找一些自动规则,但找不到如何操作。
也许有一些重写规则,但我不知道该怎么做。
有什么想法吗?
您不必必须编辑您的数据库中的任何内容,也也您的WordPress安装中的任何代码;您可以直接从您的WordPress 管理面板实现。
在您的仪表板中,单击设置下的永久链接子菜单; 在那里,您必须选择自定义结构选项并按如下方式设置才能达到您想要的效果:
/places/visit-%postname%-and-enjoy-%year%/
请注意:这里,我们同时使用了
%postname%
和 %year%
结构标签 来分别获取帖子名称及其相应的发布年份。
不要忘记单击页面上的保存更改按钮以使更改生效。
...阅读更多关于永久链接(一般知识)。
对于自定义帖子类型和分类法,如评论中进一步表达的,您将需要一个自定义解决方案,该解决方案需要一些编码和/或调整,具体取决于您的能力;您可以使用来自 WordPress.org 插件存储库的这个方便的插件(自定义帖子类型永久链接)。
如果您选择编码,这篇帖子同样对您有很大帮助,可以帮助您入门和进一步理解。
您有不同的钩子,例如 save_post 或ending_to_publish,您可以在其中设置或更改“post_name”(对应于永久链接段)。
要将特定单词添加到 WordPress 自定义类型 slug,您必须注册自定义重写规则。 假设这是您的 URL http://example.com/places/the-first-site ! 并且您有一个帖子类型的地方。
function add_rewrite_rules()
{
$wp_rewrite->add_rewrite_tag('%places%', '([^/]+)', 'places=');
$wp_rewrite->add_rewrite_tag('%state%', '([^/]+)', 'state=');
$wp_rewrite->add_permastruct('places', 'places/visit-%state%-and-enjoy/', false);
}
function permalinks($permalink, $post, $leavename)
{
$no_data = 'no-data';
$post_id = $post->ID;
if($post->post_type != 'story' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$state = get_post_meta($post_id, 'location', true);
if(!$state)
$state = $no_data;
$permalink = str_replace('%state%', $state, $permalink);
return $permalink;
}
add_action('init', 'add_rewrite_rules');
add_filter('post_type_link', 'permalinks', 10, 3);
将此代码放入您的自定义帖子类型插件中。如果出现找不到页面错误,请更改您的永久链接设置。或者制作一个自定义模板文件来显示这篇文章。