Intereting Posts
Внедрить контент-nosidebar.php / content-leftsidebar.php wordpress логин без пароля только адрес электронной почты (NO 2-фактор аутентификации с электронной почтой) получение страницы 404 для всех страниц, кроме дома. возможно постоянная ссылка Запрос и отображение только первой буквой значения get_field Изменить ссылки в разделе «Справка»? Является ли slug «type» зарезервированным и не может использоваться для перезаписи таксономии? Font-Family выглядит не так, как должно быть Можем ли мы остановить сброс сеанса, если перезагрузка страницы? Пользовательское поле удаляется после автосохранения Добавить задержку для публикации сообщения Панель инструментов WordPress, просмотр результатов CPT в 504 Отправлять почту пользователю только один раз, когда выбран определенный флажок и обновлен из профиля, обновленного администратором Проблемы с сохранением динамического метабокса Локализовать базы URL-адресов получить переменную из некоторого настраиваемого шаблона

Кажется, не получается работать JQuery (плагин wordpress)

Я пытаюсь научиться создавать плагины с помощью WordPress, но я наткнулся на эту проблему:

Всякий раз, когда я пытаюсь запустить JQuery, я получаю неопределенные ошибки и такие …

Я пробовал разные вещи, которые я нашел в Интернете, например, deregister / register / enqueue, но ничего не работает.

Цель состоит в том, чтобы заполнить текстовое поле на странице настроек плагина без перезагрузки / сохранения страницы, чтобы создать предварительный просмотр в реальном времени.

Это то, что я делаю прямо сейчас:

class plugin { public function __construct() { add_action("wp_enqueue_scripts", "jquery_enqueue"); add_action( 'admin_menu', array( $this, 'plugin_page' ) ); add_action( 'admin_init', array( $this, 'page_init' ) ); } public function jquery_enqueue() { wp_deregister_script('jquery'); wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null); wp_enqueue_script('jquery'); } public function plugin_page() { add_menu_page( '...', '...', '...', '...', array( $this, 'create_admin_page' ) ); } public function create_admin_page() { // Set class property $this->options = get_option( 'my_option_name' ); ?> <div class="wrap"> <h2>Test</h2> <form method="post" action="options.php"> <?php // This prints out all hidden setting fields settings_fields( '...' ); do_settings_sections( '...' ); ?> <script> $( document ).ready(function() { $( "#my_option_name" ).change(function() { $.post( 'classes/dummy.class.php' ).success(function(x){ json = $.parseJSON(x); $('textarea').text(json); }); }); }); </script> </form> <textarea></textarea> </div> <?php }} 

Я оставил некоторый код и включил только важные части.

Solutions Collecting From Web of "Кажется, не получается работать JQuery (плагин wordpress)"

Это общий вопрос. Меня мучило, когда я впервые начал, потому что это не имеет никакого смысла, и его трудно найти, пока не узнаете . Проблема в том, что WordPress связывает версию jQuery, которая настроена на режим noConflict. Поэтому для запуска скриптов вы должны использовать оболочки noConflict

 jQuery(document).ready(function($) { // Inside of this function, $() will work as an alias for jQuery() // and other libraries also using $ will not be accessible under this shortcut }); 

Обновить

  1. Нет необходимости загружать другую версию jQuery. Это просто усложняет ситуацию. Пусть, WordPress загружает свою собственную версию. Удалите ваш jquery_enqueue() .

  2. Затем настройте файл create_admin_page() чтобы не печатать сценарий напрямую. Я думаю, что происходит, что add_menu_page() работает до wp_enqueue_scripts и поэтому jQuery пока недоступен. Следовательно, ошибка. Вместо того, чтобы печатать сценарии, вы можете распечатать их в нижнем колонтитуле, добавив новую функцию в admin_print_footer_scripts .

Таким образом, ваш create_admin_page() теперь будет выглядеть так:

 public function create_admin_page() { // Set class property $this->options = get_option( 'my_option_name' ); add_action( 'admin_print_footer_scripts', array( $this, 'footer_scripts' ) ); ?> <div class="wrap"> <h2>Test</h2> <form method="post" action="options.php"> <?php // This prints out all hidden setting fields settings_fields( '...' ); do_settings_sections( '...' ); ?> </form> <textarea></textarea> </div> <?php } 

С вашей новой функцией:

 public function footer_scripts() { ?> <script> jQuery( document ).ready(function($) { $( "#my_option_name" ).change(function() { $.post( 'classes/dummy.class.php' ).success(function(x){ json = $.parseJSON(x); $('textarea').text(json); }); }); }); </script>