帮助扩展Wordpress插件中使用的类

时间:2011-09-01 11:54:40

标签: php wordpress class extend

首先,附带条件 - 我是设计师而不是开发者,所以请温柔;)

我试图通过扩展一个类来调整Wordpress插件。在类中有条件的if / elseif-ing中,代码调用两个函数之一。而不是这些函数,我想要调用两个新函数(实际上与旧函数相同,但再次稍微调整一下)。

我之前成功完成了这项工作:

class MY_CLASS extends MY_NEW_CLASS { ...

然后我改变了课程中的代码而离开了。但是,在这种情况下,它似乎没有起作用?

下面我粘贴了我已放入functions.php文件中的类代码:

class QA_AJAX_new extends QA_AJAX {

function init() {
    add_action( 'wp_ajax_qa_vote', array( __CLASS__, 'vote' ) );
    add_action( 'wp_ajax_qa_accept', array( __CLASS__, 'accept' ) );
}

function vote() {
    global $_qa_votes;

    $_qa_votes->handle_voting();

    $id = $_POST['post_id'];
    $post_type = get_post_type( $id );

    if ( 'question' == $post_type )
        the_question_voting_new( $id );
    elseif ( 'answer' == $post_type )
        the_answer_voting_new( $id );
    else
        die( -1 );

    die;
}

function accept() {
    global $_qa_votes;

    $_qa_votes->handle_accepting();

    $id = $_POST['answer_id'];

    the_answer_accepted( $id );

    die;
}
}

QA_AJAX_new::init();

大约一半的时间你可以看到我希望班级使用的两个新功能,the_question_voting_newthe_answer_voting_new。我也改变了最后的代码,现在说QA_AJAX_new::init(); - 我不确定我是否应该这样做,但我已经尝试过两种方式而且没有任何区别。

我显然做错了什么(或尝试做一些不可能的事情),开发人员会立刻发现一些东西,但是我的设计师大脑对php的了解并不充分。

感谢。

2 个答案:

答案 0 :(得分:0)

我首先想到的是Init不是静态的,因此您无法使用QA_AJAX_new::init();来调用它。在表单发布的脚本中尝试:

$qa_ajax = new QA_AJAX_new();
$qa_ajax->init();

答案 1 :(得分:0)

您可能会查看Object Inheritance,这似乎是问题所在 以下是您可能会尝试的其他一些事情......

  • wp-config.php 中,将 WP_DEBUG 设置为true:define('WP_DEBUG', true);
  • 确保PHP display_errors指令设置为 1 ,您应该能够将ini_set('display_errors', 1);添加到 wp_config.php 文件中

这有助于查看可能被触发和抑制的任何错误。

我和其他WP开发人员发现的最常见的事情之一是,在编写代码时,很多插件/主题作者都不会将WP_DEBUG设置为 true ,很多时候你会在邮件中找到您的错误。