将特定词添加到 WordPress 自定义类型 slug
Add specific words to WordPress custom type slug
我有一个带有自定义类型(位置)的 WordPress 安装,它会生成此永久链接结构:
http://example.com/places/the-first-site/
我想像这样显示我的所有网站:
http://example.com/places/visit-the-first-site-and-enjoy/
其中 'visit' 和 'and-enjoy' 总是那些特定的词(常量)。
更好的是,我想将我拥有的自定义分类法(年份)作为元数据
places/visit-the-first-site-and-enjoy-1985/
我可以访问数据库并修改所有 post 的 post 名称,但我也必须为新的 post 做,我正在寻找一些自动规则,但找不到如何做。
也许重写一些规则,但我不知道该怎么做。
有什么想法吗??
您不必编辑您数据库中的任何内容也没有任何代码在您的WordPress安装中;您可以直接从 WordPress 管理面板. 实现
从您的仪表板,点击设置下的永久链接子菜单; there,您必须 select 自定义结构 选项并将其设置如下以达到您想要的效果:
/places/visit-%postname%-and-enjoy-%year%/
请注意:这里我们同时使用了%postname%
和%year%
Structure Tags 以便分别得到 post 的名称及其对应的出版年份。
不要忘记单击页面上的 保存更改 按钮以使您的更改生效。
...阅读更多关于Permaklinks的内容(一般知识)。
对于 自定义 post 类型和分类法 如评论中进一步表达的那样,您将需要一个自定义解决方案,这将需要一点点编码和/或调整,取决于你的能力;你可以使用这个方便的插件 (Custom Post Type Permalinks) from the WordPress.org Plugins repository.
这个posts应该同样对你有很大的帮助,如果你选择编码,开始和进一步理解。
您有不同的挂钩,例如 save_post 或 pending_to_publish,您可以在其中设置或更改 "post_name"(对应于永久链接别名)。
要将特定词添加到 WordPress 自定义类型 slug,您必须注册自定义重写规则。
假设这是你的 URL http://example.com/places/the-first-site !
你有一个 post 类型的地方。
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);
将此代码放入您的自定义 post 类型插件中。如果找不到页面错误,请更改您的永久链接设置。或者制作一个自定义模板文件来显示这个 post。
我有一个带有自定义类型(位置)的 WordPress 安装,它会生成此永久链接结构:
http://example.com/places/the-first-site/
我想像这样显示我的所有网站:
http://example.com/places/visit-the-first-site-and-enjoy/
其中 'visit' 和 'and-enjoy' 总是那些特定的词(常量)。
更好的是,我想将我拥有的自定义分类法(年份)作为元数据
places/visit-the-first-site-and-enjoy-1985/
我可以访问数据库并修改所有 post 的 post 名称,但我也必须为新的 post 做,我正在寻找一些自动规则,但找不到如何做。
也许重写一些规则,但我不知道该怎么做。
有什么想法吗??
您不必编辑您数据库中的任何内容也没有任何代码在您的WordPress安装中;您可以直接从 WordPress 管理面板. 实现
从您的仪表板,点击设置下的永久链接子菜单; there,您必须 select 自定义结构 选项并将其设置如下以达到您想要的效果:
/places/visit-%postname%-and-enjoy-%year%/
请注意:这里我们同时使用了%postname%
和%year%
Structure Tags 以便分别得到 post 的名称及其对应的出版年份。
不要忘记单击页面上的 保存更改 按钮以使您的更改生效。
...阅读更多关于Permaklinks的内容(一般知识)。
对于 自定义 post 类型和分类法 如评论中进一步表达的那样,您将需要一个自定义解决方案,这将需要一点点编码和/或调整,取决于你的能力;你可以使用这个方便的插件 (Custom Post Type Permalinks) from the WordPress.org Plugins repository.
这个posts应该同样对你有很大的帮助,如果你选择编码,开始和进一步理解。
您有不同的挂钩,例如 save_post 或 pending_to_publish,您可以在其中设置或更改 "post_name"(对应于永久链接别名)。
要将特定词添加到 WordPress 自定义类型 slug,您必须注册自定义重写规则。 假设这是你的 URL http://example.com/places/the-first-site ! 你有一个 post 类型的地方。
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);
将此代码放入您的自定义 post 类型插件中。如果找不到页面错误,请更改您的永久链接设置。或者制作一个自定义模板文件来显示这个 post。