元盒子:‘admin_init’还是‘add_meta_box’钩子?

时间:2013-09-26 作者:sleeper

在自定义帖子类型中设置元框时,我一直使用add_meta_boxes 挂钩,例如。

add_action(\'add_meta_boxes\', \'meta_box_setup\');
function meta_box_setup()
{
    add_meta_box( 
        \'mb_movie_review\', 
        \'Movie Review Details\', 
        \'display_movie_review_mb\', 
        \'movie-reviews\', 
        \'side\', 
        \'high\' 
    );
}
但我刚刚读过this tutorial 使用admin_init 胡克,就像这样。。。

add_action(\'admin_init\', \'meta_box_setup\');
function meta_box_setup()
{
    add_meta_box( 
        \'mb_movie_review\', 
        \'Movie Review Details\', 
        \'display_movie_review_mb\', 
        \'movie-reviews\', 
        \'side\', 
        \'high\' 
    );
}
这是我第一次看到使用admin_init

Question

后一种方法(使用admin_init) does 工作,但。。。

这是preferred 方法(即更优化?)different 实现相同结果的方法,或bad 添加元框的方法?(如果是,为什么?)

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

请查看以下列表:http://codex.wordpress.org/Plugin_API/Action_Reference

你用哪一种都不重要,只要不太早也不太迟。最好使用直观和可预测的挂钩add_meta_boxes 首选。将来有一天,WordPress可能会改变一些东西,通过使用最合适的挂钩,您可以增加代码在将来仍然工作的机会add_theme_support() 通常与一起使用after_setup_theme 操作挂钩仅适用于作为管理员的登录用户,但此挂钩尚不允许您访问此信息。因此,您可能必须使用set_current_userinit 相反,动作挂钩(在做了一些研究之后,如果这样做安全的话)

SO网友:kaiser

还有其他几个挂钩:

do_action( \'add_meta_boxes\', $post_type, $post );
然后立即运行:

do_action( "add_meta_boxes_{$post_type}", $post );
如果要在实际注册元框的挂钩/回调中执行不同的中止检查,请使用上面的一个作为\\WP_Screen 对象未早于填充admin_init 跑步。

如果使用更通用的add_meta_boxes 钩子,可以对照其第一个参数进行检查:

function register( $post_type, $post )
{
    if ( get_current_screen()->post_type !== $post_type )
        return;

    add_meta_box( /* etc. */ );
}
如果您不想在帖子至少保存一次的情况下添加元框,可以选中

if ( \'add\' !== get_current_screen()->action )
    return;
等等。结论:如果您想缩小范围,请使用上面显示的挂钩。

结束

相关推荐

简单自定义Metabox不保存

我不太清楚为什么,但我一直在尝试各种不同的解决方案,但似乎都不管用。我交易过update_post_meta 具有add_post_meta 甚至把它分成3个条件,看看它是在添加、更新还是删除,但似乎什么都不起作用。问题是它实际上不会在更新时保存和显示数据。我知道设置了“\\u desc”,因为当我die() (就在更新之前)。建议我如何找出为什么它没有更新?/** Add the Meta Box **/ function add_custom_meta_box() { glob