2011-09-01 6 views
0

Во-первых, оговориться Помощь расширения класса - я дизайнер не DEV, поэтому, пожалуйста, будьте нежны;)используется в Wordpress плагин

Я пытаюсь настроить на Wordpress плагин, расширяя класс. В классе в немного условном, если/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_new и the_answer_voting_new. Я также изменил код в конце, который теперь говорит QA_AJAX_new::init(); - Я не уверен, что я должен это делать, но я пробовал это в обоих направлениях, и ни то, и другое не имеет значения.

Я, очевидно, что-то делаю неправильно (или пытаюсь сделать что-то, что невозможно), что-то, что разработчик обнаружит мгновенно, но мой плохой дизайнерский мозг не знает достаточно о php, чтобы понять это.

Спасибо.

+0

определить «Не работает». Вы получаете ошибки, он делает то, чего вы не ожидаете, или ничего не делает? –

+0

Нет, никаких ошибок. Что, кажется, происходит, так это то, что «новый» класс QA_AJAX_new, по-видимому, не расширяет (переопределяет?) Старый класс QA_AJAX, поскольку старые функции «the_question_voting» и «the_answer_voting» все еще используются - эти функции выводят некоторые html, который я изменил в своих новых версиях, но он все еще показывает старый html. Надеюсь, что это имеет смысл? – Matt

ответ

0

Моя первая мысль состоит в том, что Init не является статическим, поэтому вы не можете назвать его, используя QA_AJAX_new::init();. В сценарии, что сообщения формы попробовать:

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

Извините, я показываю свое невежество здесь, но где я могу поместить этот код? Я пробовал это сразу после моего кода выше, поэтому он выглядит так: // QA_AJAX_new :: init(); $ qa_ajax = new QA_AJAX_new(); $ Qa_ajax-> Init() ;. Однако это не оказывает никакого влияния - старый класс и функции все еще используются ... – Matt

+0

Если вы расширяете функции класса с тем же именем, они будут заменены. Кажется, что-то еще проблема. Предоставляет ли сообщение формы функции functions.php? – piddl0r

+0

Я не уверен, но function.php загружается для каждой страницы на сайте Wordpress ... Сайт в основном является сайтом Q & A, таким как Stackoverflow. Класс выше контролирует кнопки голосования по вопросам/ответам. Есть две кнопки, вверх и вниз. Вот код, который их устанавливает: 'foreach ($ buttons as $ type => $ text) { \t \t $ buttons [$ type] = $ GLOBALS ['_ qa_votes'] -> get_link ($ question_id, $ type, $ текущий, $ text); \t} '. Не уверен, что это помогает? – Matt

0

Вы можете посмотреть в Object Inheritance, который, кажется, проблема.
Вот несколько других вещей, которые вы могли бы попробовать ...

  • В сор-config.php установите WP_DEBUG истина: define('WP_DEBUG', true);
  • Убедитесь, что display_errors директива PHP установлен в , который вы сможете добавить ini_set('display_errors', 1); в ваш wp_config.php файл.

Это поможет увидеть любые ошибки, которые могут быть вызваны и подавлены.

Одним из наиболее распространенных вещей, которые я нашел, а также других разработчиков WP является то, что так много плагинов/авторы тем не установит WP_DEBUG к истинной при написании своего кода, и много раз вы найдете ошибку в сообщений.

+0

Спасибо Amereservant. Я вернусь к этому проекту через пару дней, поэтому я рассмотрю Object Inheritance и debugging, как вы предложили. – Matt

+0

Ну, я немного прочитал о наследовании объектов, и то, что я выбрал, было то, что вы должны убедиться, что класс, выполняющий расширение, загружен после оригинала - имеет смысл явно. Поэтому я рассмотрел порядок, в котором Wordpress загружает файлы, и после много экспериментов нашел способ сделать это для моего случая (моя тема - это детская тема, которая усложняет ситуацию). Однако, независимо от того, что я делаю, мой расширенный класс ничего не делает для первоначального класса. Спасибо за вашу помощь всем, но я думаю, что мне придется называть это днем ​​по этой проблеме, это слишком сложно для меня ... – Matt

+0

Ну, это не обязательно, когда файлы загружаются, но когда экземпляр класса создается , (новый Foo();). Вот пример этого: http://codepad.viper-7.com/kec3fe Так что, вероятно, происходит то, что вы создаете экземпляр класса до того, как класс, который он расширяет, был загружен, поэтому попробуйте загрузить все ваши файлы во-первых, например, через include, THEN создайте экземпляр класса. – Amereservant

Смежные вопросы