Intereting Posts
child theme – перетащил файлы из темы двадцати на их детей, теперь не работает Как использовать классы, объявленные в другом плагине? Не удается войти в WordPress, несмотря на изменение пароля на то, что известно непосредственно в MySQL или с помощью функции «Сброс пароля по электронной почте» Динамическое меню выпадает на страницы? Как создать несколько типов сообщений в одном разделе в WP-admin? Мета-бокс не добавляется в плагин Пользователь, вошедший в систему с внешнего входа, автоматически выходит из системы wp-admin Как отредактировать существующую тему WordPress? Добавить таблицу спецификаций для страницы продуктов Функция для получения идентификаторов сообщений, результатов кеша и улучшения wp_query Как создать и установить отдельный файл шаблона для статей в системе Genesis? (WordPress) admin-ajax.php медленно, как ускорить его? Ошибка «Поле пароля пуста» при использовании автозаполнения в Chrome Перечислите пользовательскую таксономию, специфичную для одного типа пользовательских сообщений. При каких обстоятельствах файл .maintenance не удаляется?

Ajax-вызов с javascript в сообщении (не в очереди)

Я хотел бы сделать вызов Ajax в JS, который я не хочу ставить в очередь для всего веб-сайта.

Для этого я помещаю скрипт непосредственно в конец сообщения, для которого он имеет значение, а не для добавления wp_enqueue_script() .

Он работает нормально до сих пор, но мне нужно добавить вызов Ajax в скрипт, и это, похоже, не работает, поскольку я не знаю, как установить команду wp_localize_script() в этом контексте.

Ожидаемый результат – это предупреждение, отображающее 1 при нажатии кнопки.

Сообщение:

 <button id="button"> Click me!</button><script type="text/javascript" src="../script.js"></script> 

Файл js выглядит примерно так:

 jQuery(document).ready(function($){ var s=1; $('button').on('click',function() { //wfire the ajax call jQuery.ajax({ url : postbutton.ajax_url, type : 'post', data : { //name of the function defined in the main plugin php file action : 'function', data : s }, success : function( response ) { alert(response); } }); }); }); 

И PHP следующий:

 add_action('wp_ajax_function','function); add_action( 'wp_enqueue_scripts', 'function_enqueue_scripts' ); function function_enqueue_scripts() { //I would not like to enqueue js script since I appended it directly in the post //wp_enqueue_script( 'ff', '../script.js', array('jquery'), '1.0', true ); wp_localize_script( 'ff', 'postbutton', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), )); }; function function() { $s=$_REQUEST['s']; return $s; } 

Solutions Collecting From Web of "Ajax-вызов с javascript в сообщении (не в очереди)"

Если вы добавите скрипт inline, вам не нужно будет использовать wp_localize_script . Все, что вам нужно сделать, – это прямо напечатать встроенный скрипт так, как вам это нужно, динамически.

Например, в вашем шаблоне:

 <?php // The PHP code of the template here ?> <script> jQuery(document).ready(function($){ var s=1; $('button').on('click',function() { //wfire the ajax call jQuery.ajax({ url : postbutton.ajax_url, type : 'post', data : { //name of the function defined in the main plugin php file action : 'function', ajax_url : <?php echo esc_js( admin_url( 'admin-ajax.php' ) ); ?>; }, success : function( response ) { alert(response); }); }); }); </script> <?php // PHP code of the rest of the template ?> 

В любом случае, вы делаете это неправильно. Если вы печатаете встроенные скрипты напрямую, вы не можете использовать полномочия менеджера зависимостей WordPress, и вы можете столкнуться с множеством проблем. Например, если вы решите переместить jQuery в нижний колонтитул, ваш встроенный JavaScript, который зависит от jQuery, перестанет работать. Другим примером является невозможность локализовать скрипт, поскольку он не имеет ассоциированного дескриптора .

Итак, если ваш сценарий зависит от другого, ВСЕГДА используйте менеджер зависимостей WordPress .

И вы можете вставлять скрипты только в одиночные сообщения, это не проблема:

 add_action( 'wp_enqueue_scripts', 'function_enqueue_scripts' ); function function_enqueue_scripts() { if( is_singular( 'post' ) { // Enqueue my script that depends on jQuery // only in single post view wp_enqueue_script( 'my-script', get_template_directory_uri() . '/script.js', array('jquery'), '1.0', true ); } } 

Начиная с предстоящего WordPress 4.5 вы можете печатать встроенные scritps с зависимостями, используя новую функцию wp_add_inline_script() . До тех пор я повторяю, никогда не печатаю сценарии, которые зависят от другого, или вы не можете управлять зависимостями, включая локализацию.