Неустранимая ошибка: вызов неопределенной функции add action() - нетронутая проблема


Этот вопрос задавался много раз по-разному, но, к сожалению, не очень хорошо освещен в большинстве ответов. У меня такая же проблема, когда я делаю что-то с помощью include-файлов.

В моей двадцатичетырехлетней детской теме functions.php Я использовал:

require_once get_stylesheet_directory_uri() .'/admin-panel/theme-options.php';

И я использую Примеры вариантов темы Иэна Стюарта. Я использовал его во многих своих проектах, так же, как упоминалось здесь, без ошибок. Но в последнее время у меня возникла проблема в нескольких моих проектах. Если я переведу код в functions.php, то все будет в порядке. Но это происходит только тогда, когда я пытаюсь включить/потребовать внешний файл.

У меня ошибка:

Фатальная ошибка: Вызов неопределенной функции add_action() в C:\xampp\htdocs\project\wp-content\themes\my-theme\admin-panel\theme-options.php в строке 2

В этом случае у меня ошибка с использованием дочерней темы (из T14). Но даже в одной из моих родительских тем я сталкиваюсь с проблемой. Но в том же среда мои другие проекты работают хорошо со всеми включениями и/или требованиями (где определено несколько add_action()). У меня возникли проблемы с ВСЕМИ add_action() вызовами , такими как Назначение CPT, Назначение пользовательской таксономии и т.д. Но я успешно разрабатываю еще два проекта, включая внешние файлы из папки inc/, в которой назначены все мои CPT, а также их мета-поля.

Я попытался переустановить WordPress, деактивировав все мои плагины, попробовал с детства Тема, попробовал только то же самое, изменив двадцать пятнадцать (применив тему по умолчанию), попробовал require(), require_once(), include(), include, require_once, и require один за другим с неудачей. И я использую WP 4.1.1 во всех хороших и проблемных установках.

На большинство предыдущих вопросов отвечают простой строкой:

Как говорится в сообщении, вы не определили функцию add_action() и все же пытаетесь ее использовать.

Но,

  • как приходите (разве это уже не определено WordPress)? и
  • почему проект отличается от проекта в одной и той же среде (Как получилось, что теперь это выходит за рамки только в определенных проектах)?
Author: Mayeenul Islam, 2015-02-22

1 answers

get_stylesheet_directory_uri() возвращает URL-адрес. Запрошенный файл вызывается, как и любой другой общедоступный ресурс: без контекста инструкции include. Это похоже на прямое открытие PHP-файла в браузере. Нет контекста WordPress, и функции add_action() или add_filter() не определены.

Используйте get_template_directory() в родительских темах и get_stylesheet_directory() в дочерних темах.

Отключить allow_url_fopen и allow_url_include в вашей среде разработки, чтобы обнаруживать подобные ошибки на ранней стадии и с лучшей ошибкой сообщения.

 4
Author: fuxia, 2015-02-22 08:09:03