,也就是说,如果插件X创建了带有子标签/ uncookedtoast /的自定义帖子类型,是否可以向functions.php(或类似内容)添加过滤器,以将子弹更改为/ bread /?
#1 楼
是的,这是可能的,但是如果插件正在使用rewrite => array('slug' => 'post_type')
参数创建自定义帖子类型,则您不太可能替换掉子弹。每当自定义帖子类型时创建后,URL重写规则将写入数据库。根据哪个操作触发自定义帖子类型的创建(例如init操作),WordPress将刷新重写规则并还原自定义帖子类型的标记,无论您尝试进行什么更改。
也就是说,您可以为自定义帖子类型提供自定义标签。下面的示例假设您具有
movies
的自定义帖子类型,并且您尝试将/movies/
子弹更改为/films/
。为完整起见,这是用于定义movies
自定义帖子的基本功能类型。您要引用的插件应该执行以下操作:function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
您可以通过基于现有帖子类型提供自己的自定义规则来修改选项表。
基本上,我们将这样做:与自定义帖子类型的子句相比,新规则具有更高的优先级
这里是如何执行此操作的方法:观看电影的方法:
/movies/Back-To-The-Future
/films/Back-To-The-Future
请注意,我不建议将
add_custom_rewrite_rule
钩入init
操作中,因为它会触发太频繁了。这只是一个例子。应用此功能的一个更好的地方是主题激活,插件激活,或者save_post操作等。根据您需要执行的操作,您可能只需要触发一次或仅几次。此时,您可能需要考虑更新自定义帖子类型的永久链接以使用'
/movies/
子弹。例如,如果导航到/films/
,将看到所有电影的列表,但将鼠标悬停在标题上将显示/movies/
子弹仍在使用中。要更进一步,您可以从技术上讲,状态为301重定向以捕获到
/movies/
的所有链接以重定向到其/films/
的对应链接,但这全都取决于您要执行的操作。评论
做工精美!您还能为我指出更新永久链接的正确方向吗?
–爱德伯里
2012年2月13日在20:23
根据您的主题,您可以在模板级别执行此操作。当看到对“ the_title()”的调用时,可以将其替换为$ title = get_the_title(),然后将$ title中的“ / movies /”替换为“ / films /”。
–汤姆
2012年2月14日下午13:16
如果您想更改的子弹是由当前帖子的元值动态创建的,该怎么办?我需要能够在add_custom_rewrite_rule()函数中使用$ post,但是它在WP Admin中抛出错误,提示“试图获取非对象的属性”。如何获取$ post以获得元值?
–李
18年1月17日在16:15
#2 楼
该代码对于我的孩子主题非常有效。需要将“程序”子弹更改为“位置”。/*
CHANGE SLUGS OF CUSTOM POST TYPES
*/
function change_post_types_slug( $args, $post_type ) {
/*item post type slug*/
if ( 'program' === $post_type ) {
$args['rewrite']['slug'] = 'place';
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );
/*
CHANGE SLUGS OF TAXONOMIES, slugs used for archive pages
*/
function change_taxonomies_slug( $args, $taxonomy ) {
/*item category*/
if ( 'program-category' === $taxonomy ) {
$args['rewrite']['slug'] = 'locations';
}
return $args;
}
add_filter( 'register_taxonomy_args', 'change_taxonomies_slug', 10, 2 );
评论
它运行完美,我也将其用于添加相对规则的标签,有必要通过从设置页面>永久链接执行保存来更新永久链接。谢谢!
–洛伦佐·马贡(Lorenzo Magon)
18-10-19在18:17
也可以完美地更改其他args,我需要将$ args ['has_archive'] = false设置为有效。
–仅开发
19年2月8日在16:35
如果我想更改帖子永久链接而不是cpt slug,该怎么办,例如:themename / projects / ** slug-of-post ** ??
– Krys
20-10-15在9:05
评论
我刚刚通过将优先级为20的init挂接到init中,然后针对相同的帖子类型再次调用register_post_type来解决了这个问题。有人知道这是否会给我带来麻烦吗?