即使在空闲时,Wordpress插件也会在init上继续触发register_post_type()

时间:2018-05-25 14:11:59

标签: wordpress

背景:

我正在使用来自Wordpress Plugin Developer Handbook的样板代码编写插件,并想知道为什么特定函数会继续触发它自己。我还在底部添加了add_action()函数并将其挂钩到init,我猜这是导致post-type重复注册的原因。

观察并试图“修复”它:

看着日志,我注意到这个函数一直在自己开火,但我无法弄清楚原因。经过一些阅读后,我尝试在我的函数顶部添加if语句,检查DOING_AJAX,这似乎抑制了post-type一遍又一遍地注册。

问题:为什么Wordpress会出现此行为?

问题:取出函数顶部的if语句并让Wordpress继续“注册”后置类型是否安全?

该功能如下所示:

function pluginprefix_setup_post_type() {

  // Exit function if doing an AJAX request
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    return;
  }

  // set up labels
  $labels = array(
    'name'  => 'Products',
    'singular_name' => 'Product',
    'add_new' => 'Add Product',
    'add_new_item' => 'Add Product',
    'edit_item' => 'Edit Product',
    'new_item' => 'New Product',
    'all_items' => 'All Products',
    'view_item' => 'View Product',
    'search_items' => 'Search Products',
    'not_found' =>  'No Product Found',
    'not_found_in_trash' => 'No Product found in Trash',
    'parent_item_colon' => '',
    'menu_name' => 'Products',
  );

  //register post type
  error_log('Registering custom post type: my_product');

  register_post_type( 'my_product', array(
    'labels' => $labels,
    'has_archive' => true,
    'public' => true,
    'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
    'taxonomies' => array( 'post_tag', 'category' ),
    'exclude_from_search' => false,
    'capability_type' => 'post',
    'rewrite' => array( 'slug' => 'myproduct' ),
    )
  );
}
add_action( 'init', 'pluginprefix_setup_post_type' );

1 个答案:

答案 0 :(得分:1)

,您可以保留帖子类型注册的方式。每次请求页面时,在加载WordPress系统期间的某个时刻会触发init挂钩。 post类型在运行时包含在$wp_post_types全局变量中,允许在站点上使用它。因此,在这种情况下,您将拥有始终正在注册的帖子类型日志。这很正常。

更直接地回答您的问题:

  

为什么Wordpress会出现这种行为?

它将帖子类型存储在运行时可用的全局中。这就是WordPress如何做到的。

  

在函数顶部取出if语句并让Wordpress继续“注册”后置类型是否安全?

完全安全且有意。