Содержание

AJAX в админке WordPress (с обработчиком admin-ajax.php) — WordPressify

Сам я совсем недавно познакомился с такой возможностью передачи асинхронных запросов в WordPress. Наткнулся в коде какого-то плагина и сперва никак не мог понять, как оно работает.

Но на деле всё оказалось очень удобным.

jQuery

Тут есть только две вещи, отличающие вордпрессовский ajax-запрос от обычного:

  • URL запроса, в данном случае это /wp-admin/admin-ajax.php, однако он уже записан в переменную ajaxurl — её то мы и будем использовать.
  • В запросе должен быть передан параметр action — что-то вроде идентификатора запроса, чтобы WordPress знал, какая функция должна обрабатывать его.

Как-то так:

jQuery.ajax({
    type:'POST',
    url:ajaxurl,
    data:'action=myaction&input_val=' + my_value,
    success:function(data){
        jQuery('#response').html(data);
    }
});

Или так:
В этом случае в HTML-форму обязательно нужно добавить скрытое поле с параметром action.

jQuery.ajax({
    type:'POST',
    url:ajaxurl,
    data:jQuery('#form').serialize(),
    success:function(data){
        jQuery('#response').html(data);
    }
});
<form>
    <input type="text" name="input_val" />
    <input type="hidden" name="action" value="myaction" />
    <button>Отправить</button>
</form>

PHP

Тут важно учесть только одну деталь — в хуках обязательно должно быть прописано значение параметра action, в моем примере это myaction.

А сам код, как обычно — в файл functions.php:

function true_function(){
    update_option('my_settings', esc_attr($_POST['input_val']));
    echo 'Привет, значение ' . $_POST['input_val'] . ' сохранено.';
    die();
}
 
// wp_ajax_ - только для зарегистрированных пользователей
add_action('wp_ajax_myaction', 'true_function'); // wp_ajax_{значение параметра action}
 
// wp_ajax_nopriv_ - только для незарегистрированных, т е для залогиненных он работать не будет (результатом выполнения запроса будет 0)
add_action('wp_ajax_nopriv_myaction', 'true_function'); // wp_ajax_nopriv_{значение параметра action}

Пример. Изменение произвольных полей постов «на лету».

Предположим, в нашем интернет-магазине прямо-таки дофига товаров и при этом приходится часто изменять их цены. Конечно, в таком случае будет удобнее, если редактируемое поле с ценой будет непосредственно в списке товаров, то есть, чтобы можно было изменять цену, не переходя на страницу редактирования.

На самом деле есть два варианта решения, но мы рассмотрим только тот, который по теме.

Шаг 1. Добавление колонки с ценой в список товаров

Более подробно о колонках в списках постов я писал здесь, кстати, возможно плагин магазина, который вы используете (если используете) уже мог сам надобавлять колонок, тогда вам потребуется лишь немного отредактировать их содержимое.

Вот готовый код для колонок.

Обязательно убедитесь, что тип поста на 16-й строчке кода соответствует вашему (слово product)!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function true_add_post_columns($my_columns){
    $slider = array( 'price' => 'Цена' );
    $my_columns = array_slice( $my_columns, 0, 5, true ) + $slider + array_slice( $my_columns, 5, NULL, true );
    return $my_columns;
}
 
function true_fill_post_columns( $column ) {
    global $post;
    switch ( $column ) {
        case 'price':
            echo '<input type="text" data-id="' . $post->ID .'" value="' . get_post_meta( $post->ID, '_price', true ) . '" /><p></p>';
            break;
    }
}
 
add_filter( 'manage_edit-product_columns', 'true_add_post_columns', 10, 1 ); // manage_edit-{тип поста}_columns
add_action( 'manage_posts_custom_column', 'true_fill_post_columns', 10, 1 );

Всталяем этот код в например functions.php, и у вас должно получиться что-то в этом роде:

По скриншоту виду, что никаких кнопок типа «Сохранить» к полю добавлено не было — на самом деле зачем они нам, если цену можно сохранять автоматически (при снятии фокуса), достаточно лишь кликнуть мышью за пределами поля ввода.

Шаг 2. Создание и подключение скриптов

Самый легкий шаг на самом деле, но при этом он очень важен. Итак, сначала нужно создать какой-нибудь пустой js-файл в папке с вашей текущей темой (важно, чтобы он находился в той же папке, что и functions.php, style.css). Назовите его как-нибудь, у меня это будет ajax-post-meta.js.

Теперь в functions.php добавим:

wp_enqueue_script('jquery');
wp_enqueue_script('ajaxpostmeta', get_stylesheet_directory_uri() . '/ajax-post-meta.js', array('jquery'));

Шаг 3. Асинхронный AJAX запрос. Содержимое файла ajax-post-meta.js

Если до этого шага вы делали всё в точности так, как я описывал, можете вставлять следующий код в ajax-post-meta.js, не задумываясь:

jQuery(function($){
    $('.this_price').blur(function(){
        this_price = $(this);
        $.ajax({
            type:'POST',
            url:ajaxurl,
            data:'action=updatePrice&price_val=' + this_price.val() + '&product_id=' + this_price.attr('data-id'),
            beforeSend:function(xhr){
                this_price.attr('readonly','readonly').next().html('Сохраняю...');
            },
            success:function(results){
                this_price.removeAttr('readonly').next().html('<span>Сохранено</span>');
            }
        });
    });
});

Шаг 4. Функция-обработчик

В functions.php:

function updatePrice_callback(){ // название не имеет значения, но должно соответствовать названиям в хуках
    update_post_meta($_POST['product_id'], '_price', esc_attr($_POST['price_val']));
    die();
}
 
if( is_admin() ) {
    add_action('wp_ajax_updatePrice', 'updatePrice_callback');
    // wp_ajax_nopriv_ не нужен, так как мы работаем в админке (а в админку не попадают незареганные пользователи)
}

Функция is_admin() нужна в данном случае для того, чтобы подключать обработчик только в бэкэнде и не нагружать остальной сайт.

В итоге у вас всё должно получиться, то есть сначала вводим цену в поле, потом щелкаем где-нибудь на странице (например переходим в другое поле), и цена сохраняется.

Как использовать AJAX в WordPress

За последние несколько лет AJAX стал самым популярным способом создания динамичных, удобных и гибких сайтов. AJAX – это технология, предоставляющая возможность обновлять содержимое на сайте без перезагрузки страниц в браузере. Например, Google Docs использует эту технологию каждые несколько минут для автоматического сохранения Вашей работы.

Несмотря на то, что существует несколько способов использовать AJAX в WordPress, и все они “правильные” в широком смысле слова, мы остановимся только на одном из них. Этот способ официально поддерживается WordPress, он очень логичен, за ним будущее, и он предоставляет очень много опций прямо “из коробки”.

Что такое AJAX?

Если Вы ещё не знакомы с AJAX, то предлагаю Вам по завершении чтения этого руководства обратить внимание на статью из Wikipedia. Это тот редкий случай, когда советуем читать как можно меньше о технологии, прежде чем приступить к практике. На практике всё не так сложно как в теории, потому что мы будем использовать библиотеку jQuery, а не чистый JavaScript.

В двух словах, AJAX представляет собой сочетание HTML, CSS и JavaScript-кода, который позволяет отсылать данные на сервер, а затем получать и обрабатывать ответ без необходимости перезагружать страницу.

Если на Вашем сайте есть страница, на которой пользователи могут изменять свой профиль, то Вы можете воспользоваться технологией AJAX для обновления профиля без перезагрузки страницы всякий раз, когда пользователь отправляет форму. После того как пользователь нажал на кнопку отправки формы, введенные им данные с помощью AJAX передаются на сервер для сохранения. Серверный скрипт возвращает строку: “данные сохранены”. После этого данные пользователя выводятся на страницу.

Чтобы разобраться в AJAX, нужно понять, чем он отличается от стандартного подхода. Если у Вас есть контактная форма на сайте, то, вероятно, она размечена с помощью HTML с применением CSS-стилей. А на сервере хранится PHP-скрипт, обрабатывающий полученную информацию. Единственное различие между AJAX-формой и обычной в том, каким образом информация попадает в скрипт на сервере и обратно к пользователю. Всё остальное идентично.

Чтобы использовать весь потенциал AJAX и получить максимальную пользу от этого руководства, Вы должны быть знакомы с JavaScript (jQuery будет достаточно), а также HTML, CSS и PHP. Если даже Ваши знания в JavaScript сомнительны, не волнуйтесь, Вы всё равно сможете следовать логике. Если Вам нужен будет совет или подсказка, напишите об этом в комментариях, и мы постараемся помочь.

Как использовать AJAX

Один из способов, которые мы использовали ещё в старые добрые времена, заключается в том, чтобы просто подключить файл wp-load.php к Вашему PHP-скрипту. Это позволит Вам использовать функции WordPress, определять текущего пользователя и так далее. Но по сути это хак, и прямо скажем, не лучшее решение. Этот способ не безопасен и не предоставляет Вам такие интересные варианты, которые предлагает система WordPress.

Как AJAX работает в WordPress

AJAX уже используется в движке WordPress и готов для работы. Всё, что от Вас требуется – использовать доступные функции. Давайте сначала посмотрим на этот процесс в общих чертах, прежде чем погрузиться в код.

Каждый AJAX-запрос проходит через файл admin-ajax.php, который находится в папке wp-admin. Пусть название файла Вас не сбивает с толку.

Каждый запрос должен передавать (используя метод GET или POST) информацию о выполняемом действии. Исходя из этого действия, код в файле admin-ajax.php создаёт два хука, wp_ajax_my_action и wp_ajax_nopriv_my_action, где my_action – переменная GET или POST, в которой хранится информация о действии.

Первый хук предназначен для авторизованных пользователей, а второй для неавторизованных.

Интеграция AJAX в WordPress

Давайте создадим элементарную систему голосования в качестве примера. Для начала создайте пустой плагин и активируйте его. Если Вам нужна помощь с этой частью, то прочитайте этот урок Как создать плагин для WordPress. После найдите файл single.php Вашей темы и откройте его.

Подготовка для выполнения AJAX-запроса

Давайте создадим ссылку, которая позволит посетителям голосовать за Ваши посты. Если в браузере посетителя включён JavaScript, то он будет использован; иначе – будет совершен переход по ссылке. В файле single.php где-то возле заголовка поста добавьте следующий фрагмент кода:



<?php

   $votes = get_post_meta($post->ID, «votes», true)

   $votes = ($votes == «») ? 0 : $votes;

?>

This post has <div><?php echo $votes ?></div> votes<br>

 

<?php

   $nonce = wp_create_nonce(«my_user_vote_nonce»);

    $link = admin_url(‘admin-ajax.php?action=my_user_vote&post_id=’.$post->ID.’&nonce=’.$nonce);

    echo ‘<a data-nonce=»‘ . $nonce . ‘» data-post_id=»‘ . $post->ID . ‘» href=»‘ . $link . ‘»>vote for this article</a>’;

?>

Сначала мы получим количество голосов текущего поста с помощью функции get_post_meta. Если функция нам вернёт пустую строку (в случае, если голосов ещё не было), то покажем пользователям нуль.

Мы создали простую ссылку с единственным небольшим дополнением. Мы используем nonces в целях безопасности для предотвращения атак и ошибок. Иначе это была бы самая обычная ссылка, указывающая на файл admin-ajax.php и передающая через GET-параметры информацию о действии для выполнения и идентификатор поста.

Для удовлетворения посетителей с включенным JavaScript, мы добавили класс user_vote, к которому мы прикрепили событие (клик левой кнопкой мыши) и параметр data-post_id, содержащий идентификатор поста. Это поможет нам передать необходимую информацию в JavaScript-код.

Обработка события без JavaScript

Если Вы нажмёте на ссылке сейчас, то будете переадресованы к скрипту admin-ajax.php, который выведет на экран “-1”. Давайте, это исправим!

В своём плагине создайте функцию и добавьте её в новые хуки, которые недавно были созданы. Вот так:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

add_action(«wp_ajax_my_user_vote», «my_user_vote»);

add_action(«wp_ajax_nopriv_my_user_vote», «my_must_login»);

 

function my_user_vote() {

 

   if ( !wp_verify_nonce( $_REQUEST[‘nonce’], «my_user_vote_nonce»)) {

      exit(«No naughty business please»);

   }  

 

   $vote_count = get_post_meta($_REQUEST[«post_id»], «votes», true);

   $vote_count = ($vote_count == ») ? 0 : $vote_count;

   $new_vote_count = $vote_count + 1;

 

   $vote = update_post_meta($_REQUEST[«post_id»], «votes», $new_vote_count);

 

   if($vote === false) {

      $result[‘type’] = «error»;

      $result[‘vote_count’] = $vote_count;

   }

   else {

      $result[‘type’] = «success»;

      $result[‘vote_count’] = $new_vote_count;

   }

 

   if(!empty($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’) {

      $result = json_encode($result);

      echo $result;

   }

   else {

      header(«Location: «.$_SERVER[«HTTP_REFERER»]);

   }

 

   die();

 

}

 

function my_must_login() {

   echo «You must log in to vote»;

   die();

}

Прежде всего, мы выполняем проверку с помощью nonce, чтобы убедиться в безопасности выполнения запроса. Если что-то не так, мы останавливаем скрипт. Иначе мы двигаемся дальше и получаем количество голосов из базы данных. Если голосов ещё не было, то установим значение переменной vote_count равное 0. После этого добавим 1 к количеству голосов.

Используя функцию update_post_meta, обновим количество голосов соответствующего поста. Эта функция создаёт мета-данные поста, если их ещё нет. Она возвращает true в случае успешного выполнения и false при возникновении ошибки. Мы создадим массив для обоих случаев.

Нам нравится использовать массив для хранения конечных результатов. Это позволяет стандартизировать обработку этих результатов и облегчить отладку ошибок.

Этот массив хранит только тип конечного результата (ошибка или успешное выполнение) и количество голосов. В случае ошибки используется старое количество голосов, т.к. новый голос не был добавлен. А если же предыдущие действия выполнились успешно, то мы учитываем новый голос.

В завершении функции мы определяем, каким образом было вызвано действие – используя стандартный подход или AJAX-запрос. Если использовался AJAX, то подготовим массив для JavaScript-кода с помощью функции json_decode. В противном случае мы просто перенаправляем пользователя на страницу, с которой он пришёл.

Всегда заканчивайте выполнение своих скриптов функцией die, чтобы быть уверенным в корректности результатов. Иначе вместе с результатами Вы будете получать строку "-1".

Функция для обработки действий неавторизованных пользователей очень проста. Вы можете её расширить, перенаправляя пользователя на страницу регистрации или отображая больше полезной информации.

Подключение JavaScript

Теперь, когда мы настроили обработку пользовательских действий, используя стандартные методы, давайте перейдём к JavaScript. Многие разработчики предпочитают именно этот метод из-за его изящности. Для того чтобы наша система использовала AJAX, нужно подключить библиотеку jQuery и сам JavaScript-код. Чтобы сделать это, добавьте следующий фрагмент кода в Ваш плагин:



add_action( ‘init’, ‘my_script_enqueuer’ );

 

function my_script_enqueuer() {

   wp_register_script( «my_voter_script», WP_PLUGIN_URL.’/my_plugin/my_voter_script.js’, array(‘jquery’) );

   wp_localize_script( ‘my_voter_script’, ‘myAjax’, array( ‘ajaxurl’ => admin_url( ‘admin-ajax.php’ )));        

 

   wp_enqueue_script( ‘jquery’ );

   wp_enqueue_script( ‘my_voter_script’ );

 

}

Таким способом в WordPress подключаются внешние файлы. Сначала мы регистрируем файл JavaScript, чтобы WordPress знал о нём (убедитесь в том, что файл создан и находится в папке с плагином). Первый аргумент функции wp_register_script – уникальный идентификатор нашего скрипта. Второй – путь к скрипту. Третий – массив зависимостей.

Нашему скрипту будет необходима библиотека jQuery, поэтому мы добавили её, как зависимость. jQuery уже зарегистрирован в WordPress, поэтому всё, что нужно было сделать – указать уникальный идентификатор.

Локализация скрипта не обязательна, но это хороший способ объявить переменные, которые мы будем использовать. Мы указываем идентификатор скрипта в качестве первого аргумента. В качестве второго – имя объекта. А в качестве третьего можно указать свойства объекта. Мы делаем это для того, чтобы можно было использовать свойство myAjax.ajaxurl, содержащее URL-адрес файла admin-ajax.php.

После того, как наши скрипты зарегистрированы, их можно добавить к страницам, используя функцию wp_enqueue_script. При этом не обязательно соблюдать правильный порядок, WordPress позаботится об этом, опираясь на указанные Вами зависимости.

Затем добавьте следующий код в файл my_voter_script.js:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

jQuery(document).ready( function() {

 

   jQuery(«.user_vote»).click( function() {

      post_id = jQuery(this).attr(«data-post_id»)

      nonce = jQuery(this).attr(«data-nonce»)

 

      jQuery.ajax({

         type : «post»,

         dataType : «json»,

         url : myAjax.ajaxurl,

         data : {action: «my_user_vote», post_id : post_id, nonce: nonce},

         success: function(response) {

            if(response.type == «success») {

               jQuery(«#vote_counter»).html(response.vote_count)

            }

            else {

               alert(«Your vote could not be added»)

            }

         }

      })  

 

   })

 

})

Давайте вернёмся к основам. Это будет полезно для тех, кто впервые сталкивается с AJAX и пока не понимает, что происходит во фрагменте кода выше. Если пользователь нажимает на кнопку голосования без включенного JavaScript, то запускается нужный PHP-скрипт и данные передаются с помощью GET-метода. Если JavaScript включен, происходит всё почти тоже самое, однако с использованием AJAX и без перезагрузки страницы.

Функция my_user_vote, объявленная в нашем плагине, обработает предоставленные ей данные и вернёт нам результат, закодированный в формате JSON. Благодаря тому, что данные возвращаются к нам именно в формате JSON, мы можем сразу же работать с ними, как с JavaScript объектом без лишних действий.

Вот что происходит в нашем примере: счётчик количества проголосовавших меняет своё значение, и новое количество голосов отображается пользователю. В реальности нам бы следовало добавить информацию о том, что всё прошло успешно и сообщить об этом проголосовавшему. Кроме того, использовать функцию alert для сообщения об ошибке было бы очень некрасиво, придумайте что-то менее раздражающее на свой вкус.

Выводы

На этом мы заканчиваем это краткое руководство по использованию AJAX в WordPress. В нашем примере ещё многое может быть сделано, но главная цель выполнена – показать Вам, как правильно использовать технологию AJAX в своих плагинах WordPress. Напомним, что это делается в четыре шага:

  1. Создаём AJAX-запрос;
  2. Создаём функцию, которая будет обрабатывать этот запрос;
  3. Добавляем функцию в хук, который был специально создан;
  4. Создаём обработчики результатов.

Как уже было сказано ранее, обязательно убедитесь в том, что всё отлично работает без включенного JavaScript. Ведь нужно, чтобы голосование корректно работало для пользователей, у которых JavaScript отключен.

Имейте ввиду, что используя хуки, можно без проблем связывать существующие в WordPress функции с нашими AJAX-запросами. Именно это, в сочетании с лёгкостью в использовании, делает систему обработки AJAX-действий в WordPress очень мощным и удобным инструментом для разработчика.


Возможно, Вам будет интересно ↓↓↓

Ajax подгрузка постов WordPress — WordPress плагины

<?php

/*

Plugin Name: Ajaxer

Text Domain: asp01

Domain Path: /languages

Description: Show post by Ajax

Version: 1.0.0

Author: Alex Kuimov

*/

 

add_action(‘wp_head’, ‘sp_scripts’);

function sp_scripts() {

wp_register_script(‘ajaxer-script’, plugins_url(‘ajaxer-script.js’, __FILE__));

wp_enqueue_script(‘ajaxer-script’);

 

wp_localize_script(‘ajaxer-script’, ‘ajax_object’, array(‘ajax_url’ => admin_url(‘admin-ajax.php’)));

}

 

add_action(‘wp_enqueue_scripts’, ‘sp_styles’);

function sp_styles() {

    wp_register_style(‘ajaxer-style’, plugins_url(‘ajaxer-style.css’, __FILE__), false, false, ‘all’);

    wp_enqueue_style(‘ajaxer-style’);

}

 

 

function sp_show_posts(){

    $count = sanitize_text_field($_POST[‘count’]);

    $first_show = sanitize_text_field($_POST[‘first_show’]);

 

    $posts_per_page = get_option(‘posts_per_page’);

    $count = $count +  $posts_per_page;

 

    $args = array(

        ‘orderby’     => ‘id’,

        ‘order’       => ‘DESC’,

        ‘post_type’   => ‘post’,

        ‘post_status’ => ‘publish’,

        

    );

 

    if($first_show == ‘y’){

        $args[‘posts_per_page’] = $posts_per_page;

    } else {

        $args[‘posts_per_page’] = $count;

    }    

 

    query_posts( $args );

 

    global $wp_query;

  

    $all_post_count = $wp_query->found_posts;

    $current_post_count = 0;

 

    while( have_posts() ): the_post();

 

        $current_post_count++;

        get_template_part(‘template-parts/single’);

 

    endwhile;

 

    wp_reset_postdata();

  

    if($all_post_count != $current_post_count){

        echo ‘<div>Загрузить еще</div>’;

    }

}

 

add_action(‘wp_ajax_sp_show_posts’, ‘sp_show_posts’);

add_action(‘wp_ajax_nopriv_sp_show_posts’, ‘sp_show_posts’);

?>

Как исправить слишком частое использование Admin Ajax WordPress: решение основных проблем

От автора: определение частоты использования admin-ajax.php – очень распространенный сценарий при работе с WordPress. Если вы уже давно работаете с WordPress, то должны были сталкиваться с этим при запуске тестов скорости и проверки логов доступа на сервере. Высокое потребление вызвано сторонними плагинами и частыми некэшируемыми запросами из панели администратора из-за Heartbeat API (например, автосохранение черновиков). Тем не менее, важно диагностировать высокие всплески admin-ajax.php, когда вы видите их, так как они, как известно, замедляют сайт. Ознакомьтесь с приведенными ниже рекомендациями по способам решения проблем с admin ajax WordPress.

Что такое файл admin-ajax.php?

При правильном использовании файл admin-ajax.php не так плох. Это часть ядра, он был добавлен командой разработки WordPress в версии 3.6. Цель admin-ajax.php – создать соединение между браузером и сервером посредством AJAX. Это открывает продвинутую функциональность, такую как улучшенное автосохранение, отслеживание изменений, таймауты авторизации, управление сессией и уведомления о блокировке поста при редактировании несколькими пользователями. Все функции замечательные, особенно для тех, кто работает с несколькими админами и авторами.

«Идея в том, чтобы иметь относительной простой API, посылающий XHR запросы на сервер каждые 15 секунд и запускающий события (или колбеки) при получении данных. Другие компоненты смогут зацепиться или получить уведомление об активности другого пользователя. Это можно использовать для блокирования одновременного редактирования виджетов и меню или для любых других задач, требующих регулярных обновлений с сервера.»

Люди без особых технических навыков могут повлиять на admin-ajax.php только одним образом – они могут попробовать понять, почему этот файл замедляет тесты скорости в инструментах типа Pingdom (см. пример ниже). Или же можно посмотреть тонны запросов к файлу в логах доступа к хосту.

Бесплатный курс «Основы создания тем WordPress»

Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц

Скачать курс

Просмотр admin-ajax.php в тестах скорости и логах доступа – это результат двух разных сценариев. Один на front end и другой на back end. О втором мы поговорим ниже.

1. Плагины могут вызвать резкий скачок в admin-ajax.php

Первая и самая частая проблема, возникающая у людей с admin-ajax.php, связана со сторонними плагинами. Это обычно видно на front end и показывается в тестах скорости. Разработчики используют этот файл и/или AJAX, чтобы добавить функциональность в свои плагины. Но если вы видите запрос к admin-ajax.php , не факт, что он замедляет ваш сайт. AJAX загружается после загрузки страницы, определенные запросы можно грузить асинхронно. Но и это не говорит о том, что разработчик делает все правильно или о производительности кода. Для разработчиков есть статья о том, как правильно использовать AJAX в темах и плагинах WordPress.

Ниже представлены примеры того, как можно быстро диагностировать скачки в admin-ajax.php. Мы будем использовать GTmetrix, так как он позволяет подробно разбирать отдельный пост и ответ. Pingdom, к сожалению, не позволяет просматривать данные из формы запроса. Можно также использовать Google Chrome Devtools или WebPageTest.

Высокие скачки admin-ajax.php из Visual Composer Plugin

Ниже представлен сторонний WordPress сайт с большими скачками в admin-ajax.php. Как видно, GTmetrix показывает скачок до 8 секунд! Остальная часть водопада выглядит нормально, но этот момент владелец сайта должен решить обязательно.

Если кликнуть в POST admin-ajax.php запрос, откроется 3 вкладки: Headers, Post и Response. Во время диагностики таких проблем нас интересуют вкладки Post и Response. На этом сайте можно мгновенно посмотреть подсказки на вкладке Response. Видно, что часть запроса связана со скриптом vc_shortcodes-custom-css.

Быстрая копипаста в google дате нам результат – проблема в плагине/конструкторе страниц Visual Composer для WordPress. Вы удивитесь количеству индексов в google.

Дальше этот человек должен убедиться, что у него установлена последняя версия Visual Composer. Если да, то необходимо связаться с разработчиками плагина и заявить о проблеме с admin-ajax.php. На самом деле, это частая проблема с плагином, как видно из поста на Stack Overflow. Плюс WordPress в том, что если вам не удалось решить проблему с одним плагином, почти всегда есть другие плагины. Например, можно попробовать другие конструкторы страниц Beaver Builder или Elementor.

Высокие скачки admin-ajax.php из Notification Bar Plugin

Ниже представлен второй пример сайта разработчика. После установки какого-то стороннего плагина мы сразу увидели огромный всплеск в admin-ajax.php.

Если кликнуть на запрос POST admin-ajax.php, можно подробно исследовать его. Можно заметить, что в данных поста есть “action=mtsnb_add_impression&bar_id=88&ab_variation=none.”.

Как правило, первая часть действия post также относится к CSS классу в плагине. Опять быстро гуглим «mtsnb», и первым результатом выпадает плагин Notification Bar, который запущен на нашем сайте.

У разработчиков есть и другие способы отслеживания плагинов, которые генерируют POST запрос, но, как мы выяснили, тест скорости и поиск google тоже достаточно эффективны.

Бесплатный курс «Основы создания тем WordPress»

Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц

Скачать курс

Верный способ определить происхождение admin-ajax.php

Выше описано пара легких способов того, как быстро найти плагин в WordPress, который вызывает проблема. По нашему опыту, это работает в 99% случаев. Но в случаях, когда post данные и действия не так ясны, всегда можно пойти старым способом. Просто отключите все плагины в WordPress. Запустите тест скорости. Если admin-ajax.php нигде не найден, включайте по одному плагину и повторно запускайте тесты. Отключение всех плагинов – верный способ найти источник.

Здесь также поможет тестовое окружение Kinsta. Просто скопируйте WordPress сайт в тестовую среду и запустите тесты без воздействия на настоящий сайт. После нахождения причины можно поправить настоящий сайт.

Подобные проблемы также может помочь решить отчет по использованию AJAX на MyKinsta analytics. Там можно смотреть определенные AJAX всплески за определенные периоды.

2. Проблемы CPU с admin-ajax.php на back end

Вторая основная проблема — WordPress Heartbeat API использует admin-ajax.php для отправки AJAX запросов из браузера, что может нагрузить CPU. Каждый AJAX запрос загружает весь back end WordPress и обходит все формы кэширования. Как правило, в тестах скорости этого не увидишь. Это особенно важно знать тем, кто использует дешевые общие хосты, так как у них не так много свободного CPU. WP Tavern испытали это на своей шкуре и мигрировали с HostGator из-за множества зависаний.

Нужно аккуратно подходить к одному сценарию – автосохранение в WordPress и открытые вкладки. Например, мы запустили новый черновик на сайте и оставили вкладку открытой. Heartbeat API по умолчанию каждые 15 секунд будет биться в admin-ajax.php для автосохранения. Если оставить вкладку открытой на компьютере, то один пост может сгенерировать 5 760 запросов за день!

Для одного человека это много запросов на back end. Но что будет, когда на сайте будет несколько редакторов? Эти запросы быстро умножатся. Мы испытали это в нашем недавнем примере DARTDrones, где мы помогали расширить сайт WooCommerce для Shark Tank. За 24 часа они получили более 4 100 запросов в файл admin-ajax.php с 2000 уникальных посетителей. Не самое хорошее соотношение запросов к посетителям. Мы обнаружили это через wp-admin referrer URL, который был создан из-за того, что их админы обновили сайт, чтобы подготовиться к показу.

Есть способы решить проблему с запросами к admin-ajax.php на back end при автосохранении, ревизиях, блокировании и т.д. Здесь нам поможет бесплатный плагин Heartbeat Control plugin от Jeff Matson.

На данный момент The Heartbeat control имеет 70 000+ активных установок с рейтингом 5 из 5 звезд. Последний раз он обновлялся 2 года назад, но за это время работа Heartbeat API почти не поменялась. Можете скачать его с репозитория WordPress или найти в панели WordPress под «Add New plugins».

Плагин позволяет парой кликов управлять частотой WordPress heartbeat API. Первая опция контролирует heartbeat locations, такие как полное отключение или «разрешено только на страницах редактирования постов». Рекомендуем использовать последнее, если вы не уверены, что можете полностью отключить функцию, не сломав плагин, который ее использует.

Вторая опция позволяет выбрать частоту. Если изменить значение с 15 секунд на 60, это кардинально снизит количество запросов, что сэкономит ресурсы сервера (загрузка CPU).

Можно также использовать премиум плагин типа perfmatters (разработан членом команды Kinsta), который позволяет отключать heartbeat, изменять его частоту и менять интервал автосохранения.

Заключение

Как видите, существуют быстрые и легкие способы диагноза и решения проблем с admin-ajax.php. Как правило, они возникают из-за сторонних плагинов, которые могут конфликтовать друг с другом или иметь плохой код. Если у вас загружается CPU на back end из-за admin-ajax.php, подумайте об управляемом WordPress хостинге типа Kinsta. У них больше опыта работы с проблемами производительности такого типа.

А у вас возникали проблемы с admin-ajax.php на сайте WordPress? А, может, у вас есть советы. Будем рады услышать ваши мысли.

Автор: Brian Jackson

Источник: //kinsta.com/

Редакция: Команда webformyself.

Бесплатный курс «Основы создания тем WordPress»

Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц

Скачать курс

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть

Файл admin-ajax.php и нагрузка на сервер

Нам в редакцию часто пишут с просьбой разобраться с нагрузкой на сайт WordPress, и во многих случаях это связано с файлом admin-ajax.php. В этой статье мы расскажем за что отвечает данный файл и как бороться с его нагрузкой на сервер.

AJAX запросы и admin-ajax.php

AJAX — это асинхронные HTTP запросы выполняемые на странице с помощью языка JavaScript, позволяющие общаться с веб-сервером без полной перезагрузки страницы. Это позволяет делать интерфейсы более быстрыми, отзывчивыми и динамичными.

В WordPress такой подход используется во многих местах: работа с медиафайлами, автоматическое сохранение записей, управление ревизиями, работа с произвольными полями, работа с виджетами и многое другое. И чтобы каждый раз не изобретать велосипед, файл admin-ajax.php в WordPress предоставляет удобный API для работы с AJAX запросами.

В данной статье мы не будем рассматривать сам API, но стоит отметить, что несмотря на присутствие слова «admin» в названии файла, через него могут проходить запросы и с лицевой части сайта, включая анонимные запросы из тем и плагинов WordPress. К сожалению многие источники ошибочно советуют отключить этот файл, или заблокировать его паролем — этого делать не стоит.

Большое количество запросов на admin-ajax.php

Как мы уже упомянули, файл admin-ajax.php вызывается при автоматическом сохранении записей, а также для обновления блокировок, чтобы два пользователя не могли редактировать одну и ту же запись одновременно. Это реализует API в WordPress под названием Heartbeat (сердцебиение), который построен на базе admin-ajax.php.

Запросы на admin-ajax.php

При редактировании записи Heartbeat отправляет запрос на admin-ajax.php каждые 15 секунд (или каждые 60 секунд, в случае если вкладка в браузере не является активной). Поэтому если вы видите в логах вашего веб-сервера большое количество запросов на admin-ajax.php стоит их проанализировать.

  • С каких IP адресов приходят эти запросы
  • С какой периодичностью они приходят
  • Сколько времени в среднем занимает один такой запрос
  • Каково содержание запроса

Итак, если эти запросы приходят с вашего IP адреса, или с IP адресов редакторов на вашем сайте, если их периодичность около 15-60 секунд, если каждый такой запрос занимает не более 0.5 сек, и содержание запросов не содержит ничего необычного, то все в порядке — файл admin-ajax.php не является источником нагрузки на ваш сервер, независимо от «большого» количества запросов. А если ваш хостинг-провайдер уверяет вас в обратном, то советуем задуматься о его компетентности и о возможном переезде.

Когда admin-ajax.php действительно является проблемой

Рассмотрим несколько вариантов, когда admin-ajax.php действительно становится источником высокой нагрузки на ваш сервер, и как бороться с этой нагрузкой.

Запросы на admin-ajax.php занимают более 1 секунды

В среднем запросы на admin-ajax.php могут занимать около 300 мс. Если же на вашем сайте данные запросы выполняются более чем за одну секунду, то необходимо разобраться. Используйте средства профилирования, чтобы понять чем именно занят процесс все это время. Наверняка вы найдете медленную функцию в вашей теме или плагине, которая не имеет никакого отношения к AJAX запросам.

Если же вы не владеете средствами профилирования, или у вас нет времени разбираться в чужом коде, то попробуйте отключить все плагины и активировать стандартную тему WordPress. Затем активируйте плагины по порядку, чтобы понять какой из них является причиной медленных запросов на admin-ajax.php.

Бывает и такое, что запросы на admin-ajax.php становятся медленными не из-за конкретных плагинов или тем, а из-за неоптимальной конфигурации сервера MySQL. Такое бывает достаточно редко, и в этом случае следует заняться оптимизацией сервера базы данных.

Подозрительное содержание запроса

Файл admin-ajax.php (и admin-post.php) часто выбирается злоумышленниками для того, чтобы использовать известную уязвимость в каком-нибудь плагине. В качестве примера можно привести недавний инцидент с популярным плагином FancyBox, где именно admin-ajax.php (или admin-post.php) послужил точкой входа.

Эти файлы выбираются не спроста, ведь каждый из них исполняет событие admin_init даже для анонимных HTTP запросов. Многие разработчики плагинов и тем, ошибочно считают, что раз выполняется событие admin_init, значит пользователь выполнил вход и имеет права администратора. Это не так. Повторяем — событие admin_init выполняется даже для анонимных HTTP запросов.

Итак, в случае с уязвимостью плагина FancyBox for WordPress, вот примерно то, как выглядит «подозрительное содержание запроса»:

46.4.76.174 – – [04/Feb/2015:00:25:09 -0500] "POST /wp-admin/admin-ajax.php?page=fancybox-for-wordpress HTTP/1.1" 403 4207 INPUTBODY:action=update&mfbfw%5Bext...

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

Неузнаваемые IP адреса

Этот пункт тесно связан с предыдущим. Если вы увидели запросы на admin-ajax.php с неузнаваемых IP адресов, то необходимо проанализировать эти запросы, и понять чего именно пытается сделать злоумышленник. IP адреса можно заблокировать, например по шаблону с помощью fail2ban.

Слишком частая периодичность запросов

Как мы уже упомянули, на активной вкладке при редактировании записи, WordPress выполняет AJAX запрос каждые 15 секунд, т.е. для достижения 1 запроса в секунду на сервере, вам необходимо 15 редакторов с открытой вкладкой. Если вы являетесь единственным редакторов на вашем сайте, а запросов на admin-ajax.php с вашего IP адреса более 1 в секунду (мы встречали и 20/с), то стоит с этим разобраться.

Самой частой причиной подобного поведения является тема или плагин, поэтому следует их деактивировать и включать по порядку, чтобы найти источник. Здесь стоит также упомянуть плагин Heartbeat Control, который позволяет изменять стандартную конфигурацию Heartbeat в WordPress, но учтите, что отключив Heartbeat вы скорее временно скрываете проблему, а не устраняете ее.

Заключение

В этой статье мы рассмотрели несколько причин, по которым может возникать высокая нагрузка на хостинг-площадку через файл admin-ajax.php, но не исключено, что могут быть и другие.

В случае с любой «лишней» нагрузкой на сервер, рекомендуем всегда проверять факты, средства профилирования — ваши лучшие друзья. Результаты порой бывают удивительными, когда например некоторые из очень популярных плагинов для WordPress оказываются самыми медленными.

7. AJAX c jQuery и WordPress

Все те небольшие рабочие примеры, построенные на базе .load и .getJSON, с которыми мы познакомились в предыдущих статьях, открывали широкую перспективу использования решений AJAX для WordPress сайтов. Самое…

На данном этапе удовольствие не заканчивается! Теперь, когда вы знакомы с использованием .getJSON, вы можете создавать многочисленные виды мешапов и решений для собственных WordPress сайтов. Понимание JSON и…

Клиенту понравилось наше прошлое улучшение, и теперь он задумывается над тем, как разбавить тяжеловесный текст, размещенный на главной странице. Мы предложили ему добавить в сайдбар шесть последний изображений…

В прошлой статье, насколько вы помните, мы получали только текст твитов, игнорируя остальное содержимое. Ниже представлен пример, что Twitter в действительности отправляет назад через JSON в строке URL:

Параметр URL в нашей функции .getJSON будет иметь следующий вид: Вы можете выбирать один из следующих форматов (мы будем использовать json): atom json rss xml Для начала нам…

В качестве введения к статье я должен заметить, что при работе с API различных сервисов очень важно тщательно изучить их документацию. Сервисы периодически обновляют свои API, расширяя предложенные…

Перед тем как погрузиться в работу с Twitter и другими сервисами, давайте изучим основы JSON, а также посмотрим, как можно интегрировать JSON и jQuery. JSON (часто произносится как…

На сегодняшний день Twitter является довольно популярным интернет-сервисом для ведения микроблогов. Именно поэтому существует множество плагинов, написанных на jQuery, которые позволяют соединиться с Twitter. Я отдаю свое предпочтение…

Давайте предположим, что у нас есть клиент – дизайнер мультимедийных проектов с открытым исходным кодом, – которому требуется выполнить чистую и оригинальную домашнюю страницу. Он желает, чтобы все…

Скажем, мы должны преобразовать часть загружаемого контента. Никаких проблем. Специально для этих целей мы можем использовать функцию обратного вызова:

Использование AJAX с PHP на вашем сайте WordPress без подключаемого модуля

Хороший дизайн незаметен! Это как кондиционер, включенный в автоматический контроль температуры. Пока вам не станет слишком жарко или холодно, вы не обращаете на это никакого внимания, вместо этого сосредотачиваясь на текущей задаче или просто наслаждаясь временем.

Для пользователей веб-серфинга Ajax похож на автоматический кондиционер. Это делает веб-сайты более плавными и быстрыми в использовании, что доставляет удовольствие. А главное, просто работает!

Если вы предпочитаете видео, вам повезло!

Что такое Ajax?

Ajax — это метод веб-разработки, обозначающий A синхронный J avaScript A nd X ML .Он используется для создания динамических интерактивных и увлекательных веб-приложений. С Ajax вам не нужно ждать перезагрузки веб-страницы, чтобы увидеть изменения. Обо всем позаботятся автоматически в фоновом режиме, не мешая тому, что вы делаете, тем самым улучшая ваше взаимодействие с пользователем.

Аякс в действии!

Вы, наверное, уже встречали Ajax в Интернете. Функция автозаполнения в Google Поиске, пожалуй, самая популярная. Карты Google — другое. Обновление твитов, комментариев на Facebook, сообщений Reddit, лайков на YouTube в реальном времени — все эти невероятные возможности для пользователей стали возможными благодаря Ajax и связанным с ним технологиям.

В этом посте я кратко ознакомлю вас с Ajax, перечислю его преимущества, объясню, как он работает в WordPress, а затем мы с головой погрузимся в создание простого плагина WordPress Ajax.

Звучит весело? Давайте начнем.

Основы Ajax

Ajax использует комбинацию языков программирования, таких как HTML / CSS, JavaScript, XML / JSON, и язык сценариев на стороне сервера (PHP, ASP.NET и т. Д.). Он работает, отправляя данные из браузера на сервер, который обрабатывает их и отправляет ответ.Этот ответ используется браузером для обновления веб-страницы без ее перезагрузки.

Вот как обычно бывает:

  • Действие пользователя запускает событие в браузере (например, нажатие кнопки).
  • Активируется вызов Ajax, который отправляет запрос на сервер с использованием XML / JSON.
  • Серверный сценарий обрабатывает этот запрос. Он также может получить доступ к базе данных, если это необходимо.
  • Затем сервер отправляет ответ браузеру.
  • Вторая функция JavaScript, называемая функцией обратного вызова, получает ответ и обновляет веб-страницу.

Множество преимуществ Ajax

  1. Минимизирует использование полосы пропускания и оптимизирует сетевые операции, поскольку серверам не требуется обрабатывать большие объемы данных.
  2. Экономит время как для пользователей, так и для сервера, поскольку пользователь может сразу увидеть ответ от сервера.
  3. Повышенная производительность. Поскольку полностраничные данные не отправляются, Ajax улучшает производительность, скорость и удобство использования веб-страниц / приложений.
  4. Повышенная отзывчивость. За счет исключения перезагрузки полной страницы веб-сайты станут более быстрыми и отзывчивыми, а значит, более удобными для пользователя.

Навыки, необходимые для работы с Ajax в WordPress

  • Знание HTML, CSS и JavaScript (достаточно jQuery)
  • Базовое знакомство с форматами обмена данными XML или JSON
  • Ноу-хау PHP для серверных сценариев

Если вы разбираетесь в jQuery или PHP на ощупь, не волнуйтесь! Вы все еще можете следовать логике учебника. Не стесняйтесь заходить в раздел комментариев, если вы застряли или вам что-то понадобится 🙂

Введение в Ajax в WordPress

Ядро WordPress уже использует Ajax, но только на экранах администратора.Например, когда вы модерируете комментарии или добавляете / удаляете элементы из категорий или сообщений, вы можете видеть мгновенные обновления благодаря Ajax. Это также технология, лежащая в основе столь любимой функции автоматического сохранения.

Ajax чаще всего используется с функциями jQuery в WordPress, поскольку он намного проще по сравнению с VanillaJS. Более того, ядро ​​WordPress уже загружено с библиотекой jQuery.

Вот как выглядит процесс использования Ajax в WordPress:

  1. Пользователь запускает запрос Ajax, который сначала передается в admin-ajax.php в папке wp-admin .
  2. Запрос Ajax должен предоставить по крайней мере один фрагмент данных (с использованием метода GET или POST). Этот запрос называется действием .
  3. Код в admin-ajax.php использует действие для создания двух хуков: wp_ajax_youraction и wp_ajax_nopriv_youraction . Здесь youraction — это значение переменной действия GET или POST.
  4. Первая ловушка wp_ajax_youraction выполняется только для зарегистрированных пользователей, а вторая ловушка wp_ajax_nopriv_youraction обслуживает исключительно вышедших из системы пользователей.Если вы хотите настроить таргетинг на всех пользователей, вам нужно запустить их обоих по отдельности.
  5. Спланируйте функции перехвата для постепенной деградации. Это гарантирует, что ваш код будет работать даже в браузерах с отключенным JavaScript.

Давайте создадим плагин WordPress Ajax

Каждое большое путешествие начинается с одного шага, как и наше обучение. Давайте создадим базовый плагин WordPress под названием Post Likes Counter со следующими функциями:

  • Зарегистрированные пользователи могут лайкать сообщения.
  • Плагин ведет подсчет общего количества лайков к постам и отображает их.
  • Счетчик лайков поста обновляется мгновенно на интерфейсе.
  • Вышедшим из системы пользователям будет показано сообщение об ошибке, если они попытаются лайкнуть сообщение.

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

Шаблон сообщения «Найди свою тему»

После этого вам нужно найти сингл вашей темы.php шаблон сообщения. Он используется, когда запрашивается отдельная запись, и именно здесь мы хотим, чтобы наш счетчик лайков был. Этот файл находится в корневой папке вашей активной темы. Оставьте его открытым для редактирования.

Подготовьте шаблон сообщения для вызова Ajax

Давайте создадим здесь ссылку, чтобы пользователи могли ставить лайки. Если у пользователя включен JavaScript, он будет использовать файл JavaScript, который мы создадим позже; в противном случае он просто перейдет по ссылке напрямую. Поместите приведенный ниже код в свой сингл .php файл.

В качестве альтернативы, вы можете добавить этот код в любую из частей шаблона , которые включает ваш файл single.php . Например, если вы используете официальную тему Twenty Nineteen , вы можете вставить этот код в файл content-single.php вашей темы. Для тестирования этого кода плагина я вставил его в этот файл в самом конце раздела div.entry-content .

Обращение к вызову Ajax без JavaScript

Щелкнув ссылку, созданную выше, вы перейдете к admin-ajax.php , но вы не увидите никаких полезных результатов, так как еще не создали никакой функции для выполнения действия.

Для этого создайте функцию в файле плагина и добавьте ее к двум хукам, которые были созданы WordPress для вас. Следуйте приведенному ниже коду:

Если все проходит успешно, когда вошедший в систему пользователь щелкает ссылку Like this Post , счетчик лайков выше должен автоматически увеличиваться на 1. В браузерах с отключенным JavaScript страница обновится, но на ней по-прежнему будет отображаться обновленное количество лайков.

Функция обработки вышедших из системы пользователей здесь мало что делает, кроме вывода сообщения об ошибке. Это всего лишь пример. Вы, конечно, можете использовать это и дать своим посетителям более полезные варианты.

Наконец, добавлена ​​поддержка JavaScript

Рекомендуется добавлять поддержку JavaScript ближе к концу, так как это значительно упрощает работу. Чтобы использовать Ajax в WordPress, вам необходимо поставить в очередь библиотеку jQuery, а также собственный файл JavaScript вашего плагина.Для этого перейдите в свой плагин и добавьте следующий скрипт:

Как только это будет сделано, пора создать файл JavaScript liker_script.js . Затем вы должны загрузить этот файл в место, указанное в предыдущем коде (подсказка: это корневая папка вашего плагина). Вот код для liker_script.js :

Функция my_user_like () , определенная в нашем плагине, должна отправлять нашему браузеру ответ в виде массива результатов в кодировке JSON, который также можно использовать как объект JavaScript.Используя это, мы можем обновить сообщение, например, count, не перезагружая веб-страницу.

И все! Ура!

Теперь вы включили функциональность Ajax для своего плагина. Конечно, вы можете расширить это и добавить больше функций по своему вкусу. Давай, настраивай его, пока не получишь!

Наш простой пост вроде счетчика. Вы можете добавить стили, анимацию и другие сценарии, чтобы повысить его уровень.

Известные плагины WordPress, использующие Ajax

Вам нужно вдохновение от Ajax, чтобы вдохновить вас? Ознакомьтесь с этими замечательными плагинами WordPress, которые используют мощь Ajax для создания мощных функций и более удобного взаимодействия с пользователем.

  1. Плагины отложенной загрузки
    Ленивая загрузка — это метод веб-разработки, используемый для сокращения времени начальной загрузки страницы. Это достигается за счет задержки загрузки ресурсоемких ресурсов, которые не видны пользователю в области просмотра браузера. Эти ресурсы загружаются автоматически, когда пользователь прокручивает веб-страницу вниз. Бесплатная версия Smush поддерживает отложенную загрузку.
  2. Forminator
    Полностью расширяемый плагин для создания форм, который также поддерживает опросы, викторины, формы заказов с вариантами оплаты и т. Д.У него есть возможность включить отправку форм с помощью Ajax, что делает его удобным для пользователей.
  3. Авторизация с помощью Ajax
    Добавьте на свой сайт WordPress плавный вход с помощью Ajax и эффекты регистрации с помощью этого многофункционального плагина. Если вы хотите предоставить своим пользователям более удобные возможности входа и регистрации, чем стандартная версия WordPress, не смотрите дальше.
  4. WP-PostRatings
    Этот простой плагин добавляет систему рейтинга Ajax для сообщений и страниц вашего сайта WordPress.Он также добавляет поддержку шорткодов для рейтингов, так что вы можете отображать их где угодно.
  5. YITH WooCommerce Ajax Product Filter
    Чрезвычайно полезный и мощный плагин для WooCommerce, который позволяет вам применять точные фильтры, необходимые для отображения вариантов продукта, которые вы ищете. Ajax гарантирует, что все это произойдет в мгновение ока.
  6. Ajax Search Lite
    Адаптивный плагин для прямого поиска для WordPress, работающий на Ajax. Он также включает автозаполнение Google и предложения ключевых слов.Предоставьте своим пользователям лучший опыт поиска на вашем веб-сайте с помощью этого плагина.
  7. Простой чат Ajax
    Вы когда-нибудь задумывались, можете ли вы общаться с другими пользователями на веб-сайте в прямом эфире? Этот плагин на базе Ajax — ответ на этот вопрос. Он совместим с мобильными устройствами и полностью настраивается в соответствии с вашими предпочтениями.

Зайдите в репозиторий плагинов WordPress.org, чтобы найти более блестящие реализации Ajax.

Сохраняйте спокойствие и Ajax!

То, что хорошо для, хорошо и для пользователя, и для сервера, но вам нужно сбалансировать это.Ajax — это мощный инструмент в вашем арсенале для повышения производительности веб-сайта и удобства пользователей. Но вы должны использовать его только там, где это необходимо. Всегда сосредотачивайтесь на аспекте взаимодействия с пользователем. Поначалу это будет немного грубо, но как только вы овладеете основами Ajax, вас уже не остановить!