为什么定制邮件类型要使用初始化钩子

时间:2018-07-18 作者:Summer Developer

我有个问题this 文档

为什么我要像文档建议的那样在init函数中注册自定义Post类型?这是不是只有在我没有使用插件的情况下才会出现?

据我所知,init runs every-time WordPress runs/is-loaded 由用户提供。这难道不意味着网站在每次访问时都会不必要地重新注册新的帖子类型吗?为什么不(如果构建插件)在require_once plugin_dir_path( __FILE__ ) 当插件激活时?

这难道不会加快网站的速度吗?还是我在口译init() 错误的当然,自定义的post类型存在于数据库中的某个位置,因此不必在每个init()?

下面是文档中的自定义帖子类型示例,使用init():

function create_post_type() {
  register_post_type( \'acme_product\',
    array(
      \'labels\' => array(
        \'name\' => __( \'Products\' ),
        \'singular_name\' => __( \'Product\' )
      ),
      \'public\' => true,
      \'has_archive\' => true,
    )
  );
}
add_action( \'init\', \'create_post_type\' );

2 个回复
最合适的回答,由SO网友:Frank P. Walentynowicz 整理而成

register_post_type 每次发出WP请求时都应执行此函数。默认职位类型没有此要求。您可以在MU插件中按原样使用代码。只需创建.PHP 使用此代码归档,并将其放入mu-plugins 的子文件夹wp-content. 您不需要提供任何标准的插件头。

SO网友:Jacob Peattie

当然,自定义post类型在数据库中的某个位置仍然存在,因此不必在每个init()上调用它?

不,不是。为什么要这样?自定义帖子类型是WordPress将用于为数据库中使用该帖子类型保存的数据设置UI的几个变量。

如果数据要频繁更改,并且更改需要持久化,那么存储在数据库中是必要的,但post类型在开发后不会更改。

考虑到这一点,在数据库中保存帖子类型的设置只会影响性能,因为WordPress需要查询数据库,以便在每次页面加载时获取注册帖子类型的设置,这比每次只执行注册码要慢(记住的只是几个变量)。

注册帖子类型最昂贵的部分是生成其重写规则,这就是为什么这些规则存储在数据库中,而重写规则应该刷新到激活和停用挂钩上。

结束