【问题标题】:Wordpress constants in plugin aren't available in included files插件中的 Wordpress 常量在包含的文件中不可用
【发布时间】:2012-08-08 14:42:47
【问题描述】:

我的问题是我的常量不能全局用于插件中更深层次的文件。让我解释一下。

在我的主 wordpress 插件文件中,第一行紧跟在必要的 /* 插件名称:blah blah 等... */ 我包括我的常量,像这样

require_once( plugin_dir_path(__FILE__) . 'constants.php' );

接下来,在我的 __construct() 函数中,我包含另一个文件,它在 wordpress 的管理部分中构建菜单项,就像这样

require_once( TRADESHOW_DIR . 'structure/build_menu.php' );

build_menu.php 文件作为路由器使用,对与每个菜单页面和子菜单相对应的页面进行更多的 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 包含文件时是否会丢失某些内容。

【问题讨论】:

标签: php wordpress constants


【解决方案1】:
FROM " . self::TRADESHOW_SUBMITTED . "

当我编写插件时,它总是 100% 在类内,所以这对我来说总是有效的。我在 __construct() 中定义常量,并在子类中使用 self.. 调用它们。

【讨论】:

  • PHP 致命错误:当没有类范围处于活动状态时无法访问 self::
  • @MariusMiliunas 尝试在 Bio_Tradeshow_Request_Plugin 的 __construct() 中包含常量?
猜你喜欢
  • 2015-04-17
  • 2019-04-05
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多