如何在WordPress中扩展类?

时间:2011-11-23 作者:shawn

我正在使用bbPress并希望扩展BBP\\U Shortcodes类,以便用我自己的函数替换函数。

以下是我的基本片段,它似乎什么都没做:

class WPTUMBLE_Shortcodes extends BBP_Shortcodes {


    /**
     * Display an index of all visible root level forums in an output buffer
     * and return to ensure that post/page contents are displayed first.
     *
     * @since bbPress (r3031)
     *
     * @param array $attr
     * @param string $content
     * @uses bbp_has_forums()
     * @uses get_template_part()
     * @return string
     */
    public function display_forum_index() {

        echo \'Yo Adrian\';
    }

}


function wptumble_register_shortcodes() {
    global $bbp;

    // Bail if bbPress is not loaded
    if (is_a($bbp, \'bbPress\')) return;

    $bbp->shortcodes = new WPTUMBLE_Shortcodes();
}

add_action( \'bbp_init\', \'wptumble_register_shortcodes\',    25  );
查看bbpress功能设置,它显示:

add_action( \'bbp_init\', \'bbp_register_shortcodes\',    18  );
我错过了什么?

*我已经尝试了每一个优先级,从挂钩到优先级1的init,一直到我在上面发布的地方,但似乎都没有做任何事情。

更奇怪的是:我基本上是将代码粘贴到一个名为xyz的插件文件中,我没有收到任何错误,只是在查看应该输出的内容时什么都没有发生。这意味着我得到的是display_forum_index()的原始输出,而不是我的新输出。

更糟糕的是,我没有简单地创建一个包含该代码的插件,而是将代码放入我的“完整”插件中。

我使用以下方法:

include_once (WPTUMBLE_PLUGIN_DIR.\'twentyeleven-bbpress-child/inc/tumble-core-shortcodes-single.php\');
然后,我将wptrull\\u Shortcodes类粘贴到上面的文件中*试图保持干净,以便在自定义插件中将不同的函数分离到不同的文件中

当我这样做时,会出现一个致命错误,即没有定义BBP\\U短代码。

唯一的区别是,我将代码放入一个名为include\\u的文件中。。

那里到底发生了什么事?

如果它是一个插件文件,要么什么都没有发生,要么如果我包含一次\\u并将代码放在另一个文件中,就会出现致命错误。

现在太困惑了。

1 个回复
最合适的回答,由SO网友:Otto 整理而成

我无法告诉您include等的错误,但您扩展类的方法基本上是正确的。

然而,我看到的最可能的情况是,您的add\\u操作基本上是在错误的位置执行的。此外,您允许原始操作继续而不是替换它,这样做是错误的。

试试这个:

add_action(\'bbp_plugins_loaded\',\'wptumble_actions_modification\');
function wptumble_actions_modification() {
  remove_action(\'bbp_init\', \'bbp_register_shortcodes\', 18);
  add_action(\'bbp_init\', \'wptumble_register_shortcodes\', 18);
}
这将删除原始操作并将其替换为您自己的操作,并在插件加载挂钩上执行,确保在您的插件和bbPress插件都加载后发生,并且可能bbPress的所有操作挂钩都已就绪,但尚未执行(因为尚未达到init)。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register