自定义POST类型档案页面的ACF:使用哪个钩子?

时间:2019-10-09 作者:Dan Burzo

我正在尝试为主题中定义的每个自定义帖子类型注册ACF选项页面:

$post_types = get_post_types(
    array(
        \'public\'   => true,
        \'_builtin\' => false
    ),
    \'objects\'
);

foreach ($post_types as $post_type) {
    $post_type_slug = $post_type->name;
    $options_title = $post_type->labels->name . ": Archive Options";
    acf_add_options_page(array(
        \'page_title\' => $options_title,
        \'menu_title\' => $options_title,
        \'parent_slug\'   => "edit.php?post_type={$post_type_slug}",
        \'menu_slug\' => "{$post_type_slug}-archive-options",
        \'capability\' => \'edit_posts\',
        \'redirect\' => false
    ));
}
这是在acf/init 吊钩(根据建议by the docs), 自定义帖子类型在WordPress上注册时init 钩(我还应该提到,这两个动作都是作为after_setup_theme 操作。)

然而get_post_types() 返回空数组。这是挂钩之间的序列不匹配吗?(即,只有在acf/init 挂钩)

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

这是挂钩之间的序列不匹配吗?

我会这么说,是的。acf/init 由类ACF执行init 方法,全部位于根文件acf中。php-此方法连接到WordPress\'init 优先级为5

add_action( \'init\', array($this, \'init\'), 5 );
您可能会添加优先级更高的CPT,这意味着acf/init 将在注册自定义帖子类型之前执行。

为了解决这个问题,我会init 以更高的优先级(小于5)注册CPT。