我的问题是我的常量不是全局可用于我的插件中包含的文件。让我解释一下。
在我的主要wordpress插件文件中,在必要的/ *插件名称之后的第一行:等等等等...... * /我包括我的常量,如此
require_once( plugin_dir_path(__FILE__) . 'constants.php' );
接下来,在我的__construct()函数中,我包含另一个文件,它在wordpress的admin部分构建菜单项,如此
require_once( TRADESHOW_DIR . 'structure/build_menu.php' );
build_menu.php文件用作路由器,对每个菜单页面和子菜单对应的页面执行mor require_once调用。这是我不明白的地方。在build_menu.php中,我仍然可以访问我的常量,我使用它们来执行wordpress数据库查询,但是我无法访问后面包含的文件中的常量。这是代码:
//// build_menu.php
function tradeshow_all_forms() {// callback from a wordpress add_submenu_page() function
global $wpdb;
$TS = new Bio_Tradeshow_Request_Plugin();// store plugin class in variable
if( isset( $_GET['form_id'] ) && is_integer( intval( $_GET['form_id'] ) ) ) {
$form = $wpdb->get_results(
"
SELECT *
FROM " . TRADESHOW_FORMS . "
WHERE id = '" . $_GET['form_id'] . "'
"
);
$form = $form[0];
echo TRADESHOW_SUBMITTED . ' build_menu.php<br />';// echo's out the correct value
require_once( TRADESHOW_DIR . 'structure/fill_form.php' );
}
}
这是fill_form.php文件的顶部
$user_id = $TS->user();
$user_id = $user_id['id'];
$form_aswers = $wpdb->get_row(// returns nothing because TRADESHOW_SUBMITTED doesn't work
"
SELECT answers
FROM " . TRADESHOW_SUBMITTED . "
WHERE user_id = '$user_id' AND form_id = '$form->id'
",
ARRAY_A
);
echo TRADSHOW_SUBMITTED;// echoes out TRADESHOW_SUBMITTED as a string and not a variable
因此,您可以看到它是主插件中包含的内容。
此外,如果有人可以向我解释为什么插件中包含的文件中没有插件的$ this变量。我在我的插件顶部有这个
static $_o = null;
static public function init() {
if (self::$_o === null)
self::$_o = new self;
return self::$_o;
}
这样我就可以做$ variable = new plugin_class;但我想了解使用require或require_once包含文件时是否会丢失某些内容。
答案 0 :(得分:0)
FROM " . self::TRADESHOW_SUBMITTED . "
当我写一个插件时,它总是100%的内部课程,所以这总是适合我。我在__construct()中定义常量,并在具有self ...的子类中调用它们。