私の問題は、定数がプラグインの奥深くに含まれるファイルでグローバルに利用できないことです。説明させてください。
私のメインのWordPressプラグインファイルでは、必要な /* Plugin Name: blah blah etc... */ の直後の最初の行に定数を次のように含めます
require_once( plugin_dir_path(__FILE__) . 'constants.php' );
次に、私の __construct() 関数内に、wordpress の管理セクションにメニュー項目を構築する別のファイルを含めます。
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 を使用してファイルをインクルードすると、何かが失われるかどうかを理解したいと思います。