带有类,命名空间和psr-0自动加载的Wordpress插件

时间:2015-04-24 12:16:35

标签: php wordpress namespaces wordpress-plugin psr-0

我在这个Wordpress上很新,我现在已经制作了自己的主题,想创建一个处理幻灯片的插件。

(我以后要为一些学生教这个,所以我不能只使用现有的插件)

我已经从底部的http://www.php-fig.org/psr/psr-0实施了自动加载器,它运行正常。

我可以调用我班级中的所有方法和所有内容,所以没关系。 以下是实际问题:

register_activation_hook(__FILE__, array('vendor\Keystroke\KeystrokeSlider', 'install'));
调用

,然后运行方法

class KeystrokeSlider{

    const VERSION = '1.0.0';

    static public function install(){
         global $wpdb;

         $charset_collate = $wpdb->get_charset_collate();

         $tableName = $wpdb->prefix . 'ks_albums';
         $sql = "CREATE TABLE IF NOT EXISTS $tableName (
             id INT(11) NOT NULL AUTO_INCREMENT,
             name VARCHAR(255) NULL,
             created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
             PRIMARY KEY  (id)
         ) $charset_collate;";

         self::upgrade();

         dbDelta($sql);

         add_option('keystroke_slider_version', self::VERSION);
    }
}

但是dbDelta()是一个未定义的函数。我可以看到它试图在函数前设置命名空间(我不知道为什么,因为它不是类方法,而是函数,对吧?)。无论如何,我试过这样称呼它

\dbDelta()

这似乎有效,但仍无法找到该功能。我可以在类中手动要求dbDelta还是有其他错误?

很抱歉很长的问题......

Ulrik McArdle

1 个答案:

答案 0 :(得分:1)

根据WP manual,为了使用dbDelta功能,您首先需要包含包含该功能的upgrade文件。

因此,在dbDelta($sql)之上添加以下代码行可以解决问题:

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