带有 类、命名空间和 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' );
我是 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' );