0

私の問題は、定数がプラグインの奥深くに含まれるファイルでグローバルに利用できないことです。説明させてください。

私のメインの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 を使用してファイルをインクルードすると、何かが失われるかどうかを理解したいと思います。

4

1 に答える 1

0
FROM " . self::TRADESHOW_SUBMITTED . "

When I'm writing a plugin, its always 100% inside class, so this always works for me. I define constants in __construct() and call them in child classes with self..

于 2012-08-11T16:09:53.863 に答える