是的,这是可能的,但是如果插件使用rewrite => array(\'slug\' => \'post_type\')
参数,则不太可能替换段塞。
每当创建自定义帖子类型时,URL重写规则都会写入数据库。取决于触发创建自定义帖子类型的操作(例如init 操作),WordPress将刷新重写规则并恢复自定义帖子类型的slug,而不管您尝试进行什么更改。
也就是说,您可以为自定义post类型提供自定义slug。以下示例假设您有一个自定义的post类型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\');
您可以通过基于现有帖子类型提供自己的自定义规则来修改选项表。
基本上,我们将这样做:
使用现有的规则集,然后使用我们自己的自定义slug编写我们自己的规则,赋予新规则比自定义post类型的slug更高的优先级,以下是您可以执行此操作的方法:
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option(\'rewrite_rules\')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces \'movies\' with \'films\' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, \'movies\') !== false) {
add_rewrite_rule(str_ireplace(\'movies\', \'films\', $key), $val, \'top\');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action(\'init\', \'add_custom_rewrite_rule\');
现在,您将有两种方式访问电影:
/movies/Back-To-The-Future
/films/Back-To-The-Future
请注意,我不建议将add_custom_rewrite_rule
进入init
动作,因为它会频繁开火。这只是一个例子。应用该功能的更好地方是主题激活、插件激活,可能是save\\u post操作等。根据需要执行的操作,您可能只需要启动一次或几次。此时,您可能需要考虑更新自定义帖子类型的永久链接,以使用\'/movies/
鼻涕虫例如,如果导航到/films/
, 您将看到所有电影的列表,但将鼠标悬停在标题上方会显示/movies/
slug仍在使用中。
更进一步,从技术上讲,您可以安装301重定向以捕获指向的所有链接/movies/
重定向到其/films/
但这一切都取决于你想做什么。