Поддержка Проблемы и решения Cannot declare — повторное обращение к functions.php?

  • Добрый день.

    Перестал работать самописный подгрузчик аякс; выдаёт серию ошибок вида:

    «Fatal error: Cannot redeclare xxx() (previously declared in /wp-content/themes/xxx/functions.php:190) in /wp-content/themes/xxx/functions.php on line 190»

    Похоже, будто functions.php вызывается дважды, но непонятно, где именно и как это преодолеть. В начале файла подгрузчика есть строка: require_once( ‘../../../wp-load.php’ ); — и всё, больше никаких вызовов чего-либо там нет.

    Собственно, вопрос: как найти, за счёт чего происходит удвоение, и как его вылечить? Вариант «сделать всем функциям проверку на function_exists» годится лишь в качестве временной меры.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • в качестве постоянной меры сделать нормальный подгрузчик, потому что как самописный вызывает два раза functions.php, знает только автор самописного.

    Если я напишу свой подгрузчик, он тоже будет самописным. И я не знаю, как его написать, не подключая в начале wp-load.php. А ошибка вылезает именно при наличии строки с этим подключением, даже если удалить из файла всё остальное.

    самописный подгрузчик аякс;

    Извините…..
    Я в программировании ничего не понимаю, но возник вопрос: а как у остальных работает аякс, без написания своего велосипеда?

    Модератор Yuri

    (@yube)

    И я не знаю, как его написать, не подключая в начале wp-load.php.

    Очень просто. Нужно не движок подключать к «загрузчику», а встраивать свой «загрузчик» в движок. Например, перехватив хук init и проверив там $_SERVER[‘REQUEST_URI’]. Если «не наш», то return. Если «наш», то что-то делаем.

    Вопрос только в том, зачем изобретать велосипед, когда существует кошерный метод AJAX in Plugins « WordPress Codex

    У меня была задача: починить то, что сделали до меня. И оно раньше работало. Задача «сделать кошерно» не ставилась.

    И… ошибка вдруг исчезла сама собой. То есть, формально задача выполнена, но теперь я буду мучиться вопросом: откуда это вылезало и что делать, если вылезет снова.

    Anonymous User 14765446

    (@anonymized-14765446)

    @greatebattle, в теории это всё круто, но на практике выполнить так поставленную задачу вы не можете — вот в этом всё дело.

    что делать, если вылезет снова

    Видимо, нужно будет немного подождать какого-то удачного стечения обстоятельств.

    Ну, если бы ошибка не исчезла, мне пришлось бы переделывать начисто (и я уже миновала фазу размышлений: «А что проще — чинить или заново?» — и начала думать на тему «Как сделать это побыстрее»). И… если честно, сейчас я подозреваю, что переделывать всё равно придётся, вопрос лишь — когда.

    Anonymous User 14765446

    (@anonymized-14765446)

    @greatebattle, бейте первой тогда 🙂

Просмотр 8 ответов — с 1 по 8 (всего 8)