【问题标题】:Wordpress plugin with classes, namespaces and psr-0 autoloading带有类、命名空间和 psr-0 自动加载的 Wordpress 插件
【发布时间】:2015-07-03 01:09:46
【问题描述】:

我对这个 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 还是有其他问题?

抱歉问了这么长的问题...

乌尔里克·麦卡德尔

【问题讨论】:

  • 如果我没记错的话,dbDelta 的错误很少。您应该改用简单的查询函数。
  • 根据手册:您应该需要升级类才能使用它require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );。延伸阅读:codex.wordpress.org/…
  • 我太笨了...谢谢...我删除了它,因为我在课堂上使用了自己的升级方法,但我完全忽略了它需要一个 wp-admin 文件...
  • 我可以把它写成答案吗?
  • 完美运行...再次感谢...

标签: php namespaces wordpress psr-0


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 2013-11-30
    • 2014-03-17
    • 2012-09-05
    • 2013-08-11
    • 2013-06-29
    • 2015-08-23
    • 2016-05-18
    • 2015-12-03
    相关资源
    最近更新 更多