如何使用register_post_type永久更新现有的自定义帖子类型?

时间:2016-03-30 14:45:39

标签: wordpress custom-post-type

我想动态地为我的自定义帖子类型执行快速重写slug更新。所以我使用的代码就像我的主题中的functions.php:

$no = get_post_type_object($pt_slug);
$no -> rewrite['with_front'] = false;
$no -> rewrite['slug'] = $slug;
register_post_type($pt_slug, $no ); 

这与“初学者”联系在一起。 add_action('init', 'check_post_type_rewrite_url');

有大量的代码所以我在这里只写了一个问题部分。

register_post_type返回带有更新的slug的对象。我理解这意味着我的自定义帖子类型已更新,但事实并非如此。现有的帖子类型仍然有旧的重写slug。我是否应该为重写规则添加一些特殊内容以保存更改并使其正常工作?或者有特定的方法来注册/更新使用重写slug的帖子类型,所以它有效吗?

1 个答案:

答案 0 :(得分:0)

您使用flush_rewrite_rules解决问题的方法在技术上是正确的,但不推荐。正如文档中所述:

  

此功能在与自定义帖子类型一起使用时非常有用,因为它允许自动刷新WordPress重写规则(通常需要手动为新的自定义帖子类型完成)。 然而,这是一项昂贵的操作,所以只有在绝对必要时才能使用

因此,您不应该在初始化挂钩中保留flush_rewrite_rules()调用,因为它会在每次加载页面时重新生成所有重写规则,这实际上非常耗费资源。

通常只需访问固定链接设置页面即可清除规则 - 因此,如果您以后再次更改CPT slug,只需访问该页面一次。

如果您的slug可以动态更改,那么您可以使用flush_rewrite_rules(),但是您需要小心使用 - 不应该在每个页面加载时调用它,但是可以由定期的cron作业使用,或者在插件激活/停用时使用,取决于具体情况。