我试图在wordpress管理面板中的php函数外部获取$post var。我发现访问$post的唯一方法是添加\\u操作。
然而,我想在add\\u操作之外得到这个var,而全局var似乎在add\\u操作中不起作用。
如何在函数外部的管理面板中获取$post。php。
我在几个小时内搜索,但找不到解决方案。。。
编辑:示例
require_once(TP_PLUGIN_PATH . \'includes/my-file-framework.php\' ); // it\'a a metabox framework
require_once(TP_PLUGIN_PATH . \'includes/my-file-config.php\' ); // I load the file that include metabox array to build metabox
class The_plugin_Admin {
public function __construct() {
add_action( \'pre_get_posts\', array($this, \'the_metabox\' ));
}
public function the_metabox() {
apply_filters( \'the_metabox_setup\',\'\');
}
}
new The_plugin_Admin;
和我的文件配置。php,我想在其中检索Wordpress global:
add_filter( \'the_metabox_setup\', \'the_metabox_setup_callback\' );
function the_metabox_setup_callback() {
global $post;
print_r($post); //empty
$post_ID = isset($_GET[\'post\']) ? $_GET[\'post\'] : 0;
echo $post_ID; // empty on new post because not already set
$post_types = get_post_types(array(\'public\' => true), \'names\', \'and\'); // no get all post type on the first time, need to loop again to get all
$an_array[] = array(......);
$an_array[] = array(......);
$an_array[] = array(......);
$an_array[] = array(......);
foreach ($an_array as $array) {
new The_Metabox($array); // contruct my metabox, the class was declared previous in my-file-framework.php
}
}
SO网友:kaiser
基本的错误是,在编写代码时,每个数据都是可用的。事实并非如此,存在挂钩是为了在core loading procedure graph.
简而言之,非常简单的东西like
这是:
# core loads
// ...more stuff...
# point at where all must-use-plugins are loaded - first entry point
do_action( \'muplugins_loaded\' );
// ...more stuff...
# point at where all plugins are loaded - second entry point
do_action( \'plugins_loaded\' );
// ...more stuff...
# main core stuff available - use this hook instead of `init` for multisite plugins
do_action( \'wp_loaded\' );
// ...more stuff...
# themes functions.php files loaded - use this hook for theme stuff
do_action( \'after_setup_theme\' );
// ...rendering happens...
在两者之间的某个地方,WP core设置(填充数据)不同
global
全局变量中的可用数据集。有些是在呈现流期间定义的,有些是在呈现流之前定义的,等等。换句话说,当您编写插件并在野外删除代码时(不是在连接到挂钩或过滤器的回调中),那么它将出现在哪里是非常不确定的。在你之前的例子中
plugins_loaded
被调用。结果要么是一个PHP错误(未定义的变量),要么只是一个空值,因为变量没有填充。
结论:Always! 将代码放入附加到(适当的)挂钩和过滤器的回调中。在大多数情况下,这意味着需要进行一些散弹枪式的调试,并将回调附加到不同的钩子/过滤器,这些钩子/过滤器是您在遵循核心加载过程读取核心文件时发现的。
访问admin中可用数据的捷径,以及通过wecodemore/"Current Admin Info"-Plugin.