我正在创建一个带有内置自定义帖子类型的WP主题(我正在使用WPAlchemy添加两个自定义元数据库)。
$theme_custom_metabox = new WPAlchemy_MetaBox(
array(
\'id\' => \'my_metabox\',
\'title\' => \'Custom Metabox\',
\'context\' => \'normal\',
\'autosave\' => TRUE,
\'types\' => array(\'post\', \'page\', \'theme_custom_post_type\'), // Can I add all custom_post_types by default here?
\'priority\' => \'high\',
\'mode\' => WPALCHEMY_MODE_EXTRACT,
\'template\' => MY_PATH . \'/includes/my_theme/metaboxes/my_metabox.php\',
));
原因:“开箱即用”,WPAlchemny要求您在“types”数组中列出post\\u类型-如果您知道所有
post_types
正在使用,但这是一个要发布的主题,因此实际使用的CPT未知。
我希望主题以编程方式将其元盒添加到用户将添加的任何自定义\\u post\\u类型。
我想最合理的方法是将所有CPT存储在一个变量中。例如:
$all_cpt = all_custom_post_keys();
...
\'types\' => $all_cpt,
...
SO网友:kaiser
如果要忽略随core提供的内容,则应过滤返回的列表,并跳过所有包含_builtin
键设置为true
. 仅使用wp_list_filter()
为此
$cpts = wp_list_filter( $GLOBALS[\'wp_post_types\'], array( \'_builtin\' => false, ) );
运行时收集另一种方法:在post类型注册结束时(
register_post_type()
) 进程中,有一个操作正在运行:
do_action( \'registered_post_type\', $post_type, $args );
根据您的用例,此操作可能是获取所有帖子类型的好地方,因为core使用
create_initial_post_types()
其中使用
register_post_type()
它本身。它还允许您获取延迟注册的帖子类型。
add_action( \'registered_post_type\', function( $pt, $args )
{
static $cpts = array();
if (
! $args->_builtin
and ! in_array( $args->name, array_keys( $cpts ) )
)
$cpts[ $args->name ] = $args;
// here, $cpts gets constant updates as soon as a new post type is registered
// ignores already added post types by name
// also ignores cores `_builtin` post types
}, 20, 2 );