为什么不能用“admin_init”钩子注册一个定制的POST类型?

时间:2017-01-27 作者:john-thomas

为什么我需要使用"init" 钩子而不是"admin_init"

init:在加载wordpress的核心之后但在发送标头之前激发

admin init:当用户访问管理区域时,在任何其他挂钩之前??那么这到底意味着什么呢?当然是在init 胡克,不是吗?

$args = array(
    \'labels\' => $labels,
    \'public\' => true,

);
register_post_type(\'random\', $args);}
add_action(\'admin_init\', \'rdf\', 0);

1 个回复
SO网友:JHoffmann

这个admin_init 在前端查看页面时不会触发挂钩。所以,挂钩register_post_type() 这样做将导致您的自定义帖子类型(及其所有帖子)在前端完全不可用。

截至Rarst\'sanswer to another question, 这个admin_init 钩子在init 钩子,这使得似乎可以使用(优先级值较低)仅为后端注册自定义post类型。但是Plugin Handbook 说应该提前做。

我的建议是使用init 按照一般建议挂钩,仅在以下情况下有条件地注册post类型is_admin() 是真的。

function wpse_254184() {
    if ( is_admin() ) {
        $args = array(
            \'labels\' => $labels,
            \'public\' => true,
        );
        register_post_type(\'random\', $args);
    }
}
add_action( \'init\', \'wpse_254184\' );