不在对象上下文中时使用$ this的致命错误

时间:2015-09-16 09:34:19

标签: php wordpress wordpress-plugin fatal-error

我试图开发一个插件。该插件已经开发但是开发的人给我们留下了不支持。当我尝试激活时,出现以下错误并且它没有被激活。

致命错误:在第23行的C:\ xampp \ htdocs .. \ wp-content \ plugins \ sjr-product-import \ functions.php中不在对象上下文中时使用$ this < / p>

行号和相关功能如下。 我不知道会出现什么问题。

/**
* Installation. Runs on activation.
* @since   1.0.0
* @return  void
*/
function install(){

global $wpdb;

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE {$this->db_table} (
          `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
          `row_id` varchar(22) DEFAULT NULL,
          `title` varchar(255) DEFAULT '',
          `description` text,
          `google_product_category` text,
          `product_type` text,
          `link` text,
          `image_link` text,
          `additional_image_link` text,
          `condition` text,
          `availability` text,
          `price` text,
          `sale_price` text,
          `sale_price_effective_date` text,
          `brand` text,
          `gtin` text,
          `mpn` varchar(22) DEFAULT NULL,
          `item_group_id` int(22) DEFAULT NULL,
          `color` text,
          `material` text,
          `pattern` text,
          `size` text,
          `gender` text,
          `age_group` text,
          `adwords_labels` text,
          `custom_label_0` text,
          `custom_label_1` text,
          `custom_label_2` text,
          `custom_label_3` text,
          `custom_label_4` text,
          `feed_file` varchar(255) DEFAULT NULL,
          `modified` datetime DEFAULT NULL,
          PRIMARY KEY (`id`),
          UNIQUE KEY `row_id` (`row_id`),
          KEY `title` (`title`),
          KEY `item_group_id` (`item_group_id`)
        ) $charset_collate;";

require_once ABSPATH . 'wp-admin/includes/upgrade.php';

dbDelta( $sql );
} // End install ()

请帮忙。谢谢。

3 个答案:

答案 0 :(得分:0)

您遇到错误:

$sql = "CREATE TABLE {$this->db_table} (

此处,$this未定义。

将其作为全局变量。

为此,请将global $wpdb;更改为global $wpdb, $this;

或者,检查您应该从哪里获得db_table的值,替换相应的变量/对象来代替$this->db_table

答案 1 :(得分:0)

if (!is_object($wpdb)) {
    require_once ABSPATH . 'wp-admin/includes/FILE NAME CLASS  OF YOUR FUNCTION get_charset_collate.php'; 
    $wpdb = new 'CLASS_NAME OF YOUR FUNCTION get_charset_collate';
}

并尝试用{$ wpdb-&gt; db_table}替换{$ this-&gt; db_table}  注意:这只是检查对象变量的想法。

答案 2 :(得分:0)

你应该在functions.php中使用类似下面的代码来使用$this

class SomeClass {
    var $db_table = 'my_table';
    ...
    function install() {
        global $wpdb;

        $charset_collate = $wpdb->get_charset_collate();

        $sql = "CREATE TABLE {$this->db_table} (

但您可能没有类似的代码从$this->db_table

获取var $db_table

所以用

代替第238行
$sql = "CREATE TABLE my_table (

测试它是否有效