Intereting Posts
Изменение дизайна уведомлений WooCommerce Количество просмотров в цикле Расширенные пользовательские поля – термины таксономии изображения Как получить shortcode, работающий из настраиваемого мета поля В WordPress я создаю таблицы для своего плагина или я создаю пользовательские типы сообщений для системы регистрации учащихся и классов? Плагин jQuery загружен правильно, но ничего не делает Невозможно провести различие между двумя категориями под пользовательским типом сообщения на single.php Переписать / категорию / автомобили в / темы / автомобили Домашняя страница пользовательских последних новостей Обновление пользовательского поля в wordpress Получение текущего идентификатора сообщения в functions.php Добавить простой почтовый ящик JS для отправки сообщений Сохраненная метастатистика столбца возвращается в виде строки Будет ли добавление и изменение индекса индекса WordPress по умолчанию для WordPress в будущем? Категории WordPress не работают на сайте

Пользовательский параметр темы – Обновление Javascript (jQuery) с использованием `.load ('file.php')` – Неустранимая ошибка: вызов функции undefined

МОЯ НАСТРОЙКА (И КОД)


  • WordPress Версия 4.4.3 (последняя на момент написания)
  • Установлен на локальном сервере с помощью XAMPP

Я использую WordPress Theme Customizer и обновляю настройки с помощью JavascriptjQuery ).

Моя домашняя страница разделена на несколько разделов, а в Настройке темы есть флажки для отображения и скрытия каждого раздела.

  • Когда секция должна быть скрыта, я использую .remove() jQuery для ее удаления.
  • Когда раздел будет показан, я использую следующий код:

$('#section-cont-id').load(theme_folder + '/file.php')

Где theme_folder – это каталог темы, а file.php – это раздел, который я хочу загрузить.

По умолчанию отображается раздел (для параметра установлено значение true ). .remove флажка, чтобы скрыть раздел, отлично работает, он получает .remove ed. Однако, когда я пытаюсь показать этот раздел, добавив флажок, он работает не так, как планировалось.


ПРОБЛЕМА


file.php имеет в file.php <style> с одним небольшим количеством кода PHP. Тогда есть различные другие элементы: <h1>, <h3>, <p> и т. Д. Когда секция предназначена для показа, я вместо этого получаю пустой белый квадрат. Я использовал Inspect Element для просмотра кода и нашел что-то интересное:

Тег <style> загружается, но остальные элементы этого не делают, они даже не существуют. В теге <style> существует только одна строка PHP, она получает настройку для фона этого раздела: <?php echo get_theme_mod('setting'); ?> <?php echo get_theme_mod('setting'); ?> . Когда я смотрю на CSS для фонового изображения раздела, он показывает следующее:

url('<br /> <b>Fatal error</b>: Call to undefined function get_theme_mod() in <b>C:XAMPPhtdocsWPwp-contentthemesmythemefile.php</b> on line <b>7</b><br />')

Кажется, функция get_theme_mod() не определена? Кроме того, я не уверен, почему путь был echo без обратных косых черт, но это могут быть инструменты Firefox Inspector, удаляющие их. Правильный путь должен быть:

C:\XAMPP\htdocs\WP\wp-content\themes\mytheme\file.php

Элементы после <style> обозначаются следующим образом:

 <h1><?php echo get_theme_mod('setting1'); ?></h1> <h3><?php echo get_theme_mod('setting2'); ?></h3> <p><?php echo get_theme_mod('setting3'); ?></p> 

Однако они даже не выглядят пустыми (без содержимого, например <h1></h1> ). Их вообще не существует.

Поэтому мой вопрос:

Как удалить Fatal error: Call to undefined function... вызвать Fatal error: Call to undefined function... и загрузить остальную часть file.php для правильной загрузки


ЗАКЛЮЧЕНИЕ ПРОБЛЕМЫ


То, что я думаю , происходит:


Прежде всего, я думаю, что элементы после <style> не существуют, потому что после того, как PHP-код выдает ошибку, остальная часть файла не загружается.

Тем не менее, весь код в file.php находится внутри <div> , и этот тег закрытия закрывается. Может быть, он загружает элементы и закрывает теги, используя DOM, а не по очереди?


Чтобы справиться с ошибкой get_theme_mod() не определена, вот моя теория:

  • (FACT) WordPress регистрирует get_theme_mod() в файле с именем theme.php (как указано в Codex, полный путь – wp-includes/theme.php )

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

Мои доказательства для этого:

  1. Fatal Error: Call to undefined function... Если функция не определена, файл нельзя загружать
  2. Когда я проверяю элемент на странице (Firefox 46), если вы нажмете вкладку « Отладчик », вы увидите все включенные / связанные файлы. Он показывает множество файлов Javascript и PHP, но не theme.php

ЗАМЕТКИ


Это очень отличается от других вопросов о Fatal error: Call to undefined function... Я не получаю ошибку, когда страница загружается, независимо от того, показан ли раздел или нет. Я получаю сообщение об ошибке в Настройке темы, когда я пытаюсь показать раздел (ранее скрытый)

По-видимому, для запуска PHP-кода (с помощью функций WordPress) вы должны использовать AJAX по-разному

Во-первых, вам нужно добавить wp_localize_script() чтобы добавить данные в скрипт. Я использовал следующий код:

 // For AJAX loading of sections wp_localize_script('customizer', 'ajax', array( 'url' => admin_url('admin-ajax.php') )); 

Где customizer – уникальный идентификатор для скрипта Customizer.

В скрипте customizer я использовал следующий код (внутри функции, прослушивающей изменения настроек в Настройке темы):

 jQuery.ajax({ url : ajax.url, type : 'post', data : { action : 'load_section', section_name: 'section1' }, success : function(data) { $('div').append(data) // On success, add section to page } }); 

ajax.url содержит URL-адрес, который был установлен в wp_localize_script() . Вы используете ajax. потому что 'ajax был вторым аргументом

Затем вам нужно использовать add_action() следующим образом:

 // To get file.php ($_POST['data'] can be used to access data from the "data" object) function load_a_section() { get_template_part(echo $_POST['section'], echo $_POST['section'] + '_template'); die(); // To stop a "0" being added to the end of the data } // This is the "action" stored in the "data" object, prepended with wp_ajax_ add_action('wp_ajax_load_section', 'load_a_section'); 

Данные, возвращенные из load_a_section() могут быть доступны из функции success внутри запроса AJAX