背景:
我正在使用来自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' );
答案 0 :(得分:1)
是 ,您可以保留帖子类型注册的方式。每次请求页面时,在加载WordPress系统期间的某个时刻会触发init
挂钩。 post类型在运行时包含在$wp_post_types
全局变量中,允许在站点上使用它。因此,在这种情况下,您将拥有始终正在注册的帖子类型日志。这很正常。
更直接地回答您的问题:
为什么Wordpress会出现这种行为?
它将帖子类型存储在运行时可用的全局中。这就是WordPress如何做到的。
在函数顶部取出if语句并让Wordpress继续“注册”后置类型是否安全?
完全安全且有意。