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

Wordpress plugin with classes, namespaces and psr-0 autoloading

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

(以后要教给一些学生,所以不能只用现成的插件)

我已经在底部实现了 http://www.php-fig.org/psr/psr-0 的自动加载器,它工作正常。

我可以调用 class 中的所有方法和所有内容,这很好。 这里是真正的问题:

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() 是一个未定义的函数。我可以看到它试图在函数前面设置命名空间(我不知道为什么,因为它不在 class 方法,而是一个函数,对吧?)。不管怎样,我试过这样称呼它

\dbDelta()

好像可以,但是还是找不到函数。我可以在 class 中手动要求 dbDelta 还是有其他问题?

抱歉这个问题很长...

乌尔里克·麦卡德尔

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

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

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