关于初始化和激活挂钩的问题

时间:2020-04-09 作者:Haibin Liu

我对以下代码有疑问,请访问https://developer.wordpress.org/plugins/plugin-basics/activation-deactivation-hooks/#example

function pluginprefix_setup_post_type() {
    // register the "book" custom post type
    register_post_type( \'book\', [\'public\' => true] );
}
add_action( \'init\', \'pluginprefix_setup_post_type\' );

function pluginprefix_install() {
    // trigger our function that registers the custom post type
    pluginprefix_setup_post_type();

    // clear the permalinks after the post type has been registered
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, \'pluginprefix_install\' );
为什么pluginprefix_setup_post_type 两个都需要调用initactivation? 我尝试了一个示例插件,对调用pluginprefix_setup_post_type 在里面pluginprefix_install 并添加label 如下所示。

function pluginprefix_setup_post_type() {
    // register the "book" custom post type
    register_post_type( \'book\', [\'public\' => true, \'label\' => \'Books\'] );
}
add_action( \'init\', \'pluginprefix_setup_post_type\' );

function pluginprefix_install() {
    // trigger our function that registers the custom post type
    // pluginprefix_setup_post_type();

    // clear the permalinks after the post type has been registered
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, \'pluginprefix_install\' );
代码也运行良好。我可以看到Books 在管理菜单中,一旦我激活插件。

那么,两次调用它有什么好处呢?

1 个回复
最合适的回答,由SO网友:Rup 整理而成

我认为你弄错了,激活没有正常工作:你不会在永久链接缓存中设置新的帖子类型。

这是activate_plugin() in 5.4. 您可以看到序列是

wp管理/插件。php加载时没有新插件;现在触发init

  • activate\\u plugin()PHP包括新插件,加载它并注册它的挂钩;现在调用插件的init hook为时已晚,activate\\u plugin()调用全局activate\\u plugin hook,activate\\u plugin()调用特定于插件的activate hook,因此如果您依赖init hook在激活案例中注册帖子类型,那么之前不会调用它flush_rewrite_rules(). 并不是说你会在这里看到任何错误,但新的帖子类型不会在永久链接缓存中设置。

    (除非你有一个触发init的activate\\u插件挂钩,但这似乎不太可能,而且肯定不是默认的。)

  • 相关推荐