繁体   English   中英

具有类,名称空间和psr-0自动加载功能的Wordpress插件

[英]Wordpress plugin with classes, namespaces and psr-0 autoloading

我在这个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还是其他错误?

很抱歉很长的问题...

乌里克·麦克阿德尔

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM