为什么我不能在函数外部使用变量?

时间:2016-02-19 作者:Augusto

我正在编写一个小插件,以提取帖子ID,并将其用于一些查询。

当然,如果我写:

function my_callback_function() {
    $aa = \'hello world!\';
    echo $aa;
}
call_user_func(\'my_callback_function\'); 
// returns: hello world 
但如果我写:

function my_callback_function2() {
    global $post; 
    // get post iD
    $aa = $post->ID;
    echo $aa;
}
call_user_func(\'my_callback_function2\'); 
// returns: null... nothing
但是,如果我从“add\\u meta\\u box”调用我的\\u callback\\u function2,它会很好地工作:

function _custom_meta_boxes() {

    add_meta_box(\'projects_refid\', \'Post ID\', \'my_callback_function2\',
    \'x-portfolio\', \'side\', \'high\');
}
add_action(\'add_meta_boxes\', \'_custom_meta_boxes\');
// returns the correct post ID: 5345
问题是:如何使用$aa变量进行简单的db查询。。。或者像这样:echo$aa;我喜欢哪里?

提前感谢,对于这个琐碎的问题,我深表歉意!

奥古斯都

1 个回复
SO网友:Tom J Nowell

这里的问题是秩序$post 变量在WordPress加载时不可用,它需要处理请求、组合数据库查询并首先检索帖子。时间旅行是代码按预期工作所必需的。

您的主题functions.php 插件会在这之前加载,让他们有机会在这个过程中发言,所以如果你试图使用$post 到那时,它将失败,我们不知道$post 但是,这项工作还没有完成。

它在add metabox调用中起作用的原因是,该操作在检索帖子后发生。此操作在将来发生时$post 完成所需工作后,存在并已知。

我建议您在操作和过滤器内部工作,并依赖常见的操作来完成这项工作,例如init 挂钩,或admin_init 挂钩等

See here for information on when hooks and important events happen, and when things are possible

相关推荐

如何获取`COMMENT_POST_ID`?

我已经提取了回复电子邮件。原始电子邮件保存为CPT,并在我的插件中作为票据使用。我希望回复邮件作为对原始邮件的评论。 for($j = 1; $j <= $total; $j++){ $mail = $emails->get($j); //This checks if the email is reply or not and if the email is reply make it comment to its original post.