Статьи

Создание Intro.js Powered Tours в WordPress

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

Создание WordPress-плагина Intro.js

Плагины — это рекомендуемые компоненты для добавления пользовательского поведения в WordPress. Мы будем использовать плагин для интеграции Intro.js в WordPress. Начните с создания новой папки в папке wp-content/plugins и назовите ее wpintrojs . Затем создайте основной файл плагина index.php и используйте следующий код для определения плагина.

 <?php /* Plugin Name: Introjs Tours Plugin URI: Description: Integrating intro.js powered product tours into WordPress Author: Your Name Version: 1.0 Author URI: http://www.innovativephp.com/ */ 

Затем войдите как admin и активируйте плагин в разделе плагинов.

Создание шагов по продукту

В предыдущем уроке мы настраивали каждый шаг вручную, назначая необходимые data-attributes и значения. Здесь нам нужен более простой способ настройки шагов тура, поскольку контент генерируется динамически в WordPress. Таким образом, важно создать определенную страницу плагина для настройки шагов. Давайте начнем с добавления новой специфичной для плагина страницы, используя следующий код.

 add_action( 'admin_menu', 'wpintro_menu_page' ); function wpintro_menu_page(){ add_menu_page( 'Product Tours', 'Product Tours', 'manage_options', 'wpintro_tour', 'wpintro_menu_page_display', plugins_url( 'myplugin/images/icon.png' ), 6 ); add_submenu_page( 'wpintro_tour', 'Manage Steps', 'Manage Steps', 'manage_options', 'wpintro_tour_steps', 'wpintro_manage_steps_display' ); } 

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

 function wpintro_menu_page_display() { global $wip_message; $pages = get_pages(); $html = ''; if ($wip_message != '') { $html .= '<div style="background:#9FD09F;padding:5px;">' . $wip_message . '</div>'; } $html .= '<h2>Create Product Tour</h2>'; $html .= '<form action="" method="post">'; $html .= '<table class="form-table"><tbody>'; $html .= ' <tr valign="top"> <th scope="row"><label>Select Page</label></th> <td><select class="regular-text" id="wpi_page" name="wpi_page">'; foreach ($pages as $page) { $html .= '<option value="' . get_page_link($page->ID) . '">'; $html .= $page->post_title; $html .= '</option>'; } $html .= ' </select></td> </tr>'; $html .= ' <tr valign="top"> <th scope="row"><label>Intro Text</label></th> <td><textarea class="regular-text" id="wpi_intro_text" name="wpi_intro_text"></textarea></td> </tr>'; $html .= ' <tr valign="top"> <th scope="row"><label>Element ID</label></th> <td><input type="text" class="regular-text" id="wpi_element_id" name="wpi_element_id"/></td> </tr>'; $html .= ' <tr valign="top"> <th scope="row"><label></label></th> <td><input type="hidden" class="regular-text" id="wpi_action" name="wpi_action" value="save_steps" /> <input type="submit" class="regular-text" id="wpi_submit" name="wpi_submit" value="Save" /></td> </tr>'; $html .= '</tbody></table></form>'; echo $html; } 

Эта функция используется для отображения содержимого страницы меню. Страница состоит из заголовка и HTML-формы для генерации шагов. Форма содержит три поля для добавления новых шагов.

  • Идентификатор элемента — используется для определения идентификатора HTML-элемента, используемого для шага.
  • Выбрать страницу — используется для выбора страницы, содержащей назначенный идентификатор элемента.
  • Вступительный текст — используется для определения описания, которое будет отображаться при каждом шаге в обзоре продукта.

После реализации экран создания шага будет выглядеть следующим образом.

Создание шагов продукта

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

 add_action('init', 'wpintro_save_steps'); function wpintro_save_steps() { global $wip_message; if (isset($_POST['wpi_action']) && $_POST['wpi_action'] == 'save_steps') { $intro_text = $_POST['wpi_intro_text']; $page = $_POST['wpi_page']; $element_id = $_POST['wpi_element_id']; $step_data = get_option('wpi_step_data', ''); if ($step_data != '') { $step_data = unserialize($step_data); $step_data["wip" . rand(1000, 1000000)] = array("desc" => $intro_text, "url" => $page, "id" => $element_id); } else { $step_data = array("wip" . rand(1000, 1000000) => array("desc" => $intro_text, "url" => $page, "id" => $element_id)); } $step_data = serialize($step_data); update_option('wpi_step_data', $step_data); $wip_message = "Step saved successfully"; } else { $wip_message = ""; } } 

Здесь мы использовали действие init для определения функции wpintro_save_steps . Как правило, действие init используется для перехвата пользовательских данных через $_GET или $_POST . Мы использовали скрытое поле внутри формы, чтобы определить действие для процесса сохранения. Мы должны проверить действие, так как эта функция может перехватывать пользовательские данные через другие формы. Затем мы присваиваем данные $_POST переменным.

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

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

Настройка порядка шагов

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

Давайте покажем все доступные шаги для сортировки на странице подменю, созданной ранее.

 function wpintro_manage_steps_display() { $step_data = get_option('wpi_step_data', ''); if ($step_data != '') { $step_data = unserialize($step_data); } echo "<div id='sortable'>"; foreach ($step_data as $key => $data) { echo "<div class='wip_sort' style='margin:5px; border:2px solid; background: #fff;' data-identifier=" . $key . " > <ul> <li>" . $data['url'] . "</li> <li>" . $data['desc'] . "</li> <li>" . $data['id'] . "</li> </ul> </div>"; } echo "</div>"; } 

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

Заказ товара

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

 function wpintro_admin_scripts() { wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-sortable'); wp_register_script('wpintro_admin', plugin_dir_url(__FILE__) . 'admin.js', array('jquery')); wp_enqueue_script('wpintro_admin'); $config_array = array( 'ajaxURL' => admin_url('admin-ajax.php'), ); wp_localize_script('wpintro_admin', 'conf', $config_array); } add_action('admin_enqueue_scripts', 'wpintro_admin_scripts'); 

Рекомендуется использовать admin_enqueue_scripts действия admin_enqueue_scripts для назначения сценариев и стилей, необходимых для раздела администратора. Здесь мы использовали wp_enqueue_script для ядра пользовательского интерфейса jQuery и сортируемых исходных файлов, так как они доступны по умолчанию внутри ядра WordPress. Мы должны использовать функции wp_register_script и wp_enqueue_script , так как admin.js — это пользовательский файл JavaScript. Наконец, мы используем функцию wp_localize_script для добавления необходимых данных конфигурации в admin.js .

Давайте посмотрим на файл admin.js (показанный ниже) для обработки порядка сортировки шагов.

 jQuery(document).ready(function() { jQuery("#sortable").sortable({ update: function() { var selected_ids = ""; jQuery(".wip_sort").each(function() { selected_ids += jQuery(this).attr("data-identifier")+"@"; }); jQuery.post(conf.ajaxURL, { action: "wpintro_update_step_order", data: selected_ids, }, function(data) { }, "json"); } }); jQuery("#sortable").disableSelection(); }); 

Мы #sortable сортируемую функциональность в контейнере #sortable . Все основные элементы div внутри контейнера #sortable получат функции перетаскивания. Мы можем переместить элементы div чтобы установить правильный порядок шагов. Пользовательский интерфейс jQuery будет выполнять функцию update каждый раз, когда мы перемещаем элементы путем перетаскивания.

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

 add_action( 'wp_ajax_nopriv_wpintro_update_step_order', 'wpintro_update_step_order'); add_action('wp_ajax_wpintro_update_step_order', 'wpintro_update_step_order'); function wpintro_update_step_order() { $step_data = get_option('wpi_step_data', ''); $step_data = unserialize($step_data); $updates_step_order = array(); $step_order = explode('@', $_POST['data']); array_pop($step_order); for ($i = 0; $i < count($step_order); $i++) { $updates_step_order[$step_order[$i]] = $step_data[$step_order[$i]]; } $step_data = serialize($updates_step_order); update_option('wpi_step_data', $step_data); echo json_encode($updates_step_order); exit; } 

Функция wpintro_update_step_order используется для обработки запросов AJAX на стороне сервера. Сначала мы извлекаем существующие данные шага из базы данных. Затем мы перебираем идентификаторы шага и переставляем данные шага в соответствии с обновленным порядком. Наконец, мы сохраняем обновленные данные шага в базе данных.

Мы завершили бэкэнд-функциональность продукта. На данный момент у нас есть все данные о шаге продукта для реализации тура. В следующем разделе мы рассмотрим реализацию продукта на веб-интерфейсе.

Интеграция данных шага с Intro.js

Пришло время составить обзор продукта, используя существующие данные шага с Intro.js. Во-первых, мы должны включить файлы JavaScript и CSS с данными конфигурации. Я предполагаю, что вы уже прочитали предыдущее руководство и загрузили файлы, связанные с Intro.js. Скопируйте файлы intro.js и introjs.css в папку wpintrojs . Следующий код показывает включение файлов сценариев в веб-интерфейс.

 add_action('wp_enqueue_scripts', 'wpintro_enqueue_script'); function wpintro_enqueue_script() { wp_enqueue_script('jquery'); wp_register_script('introjs', plugin_dir_url(__FILE__) . 'intro.js'); wp_enqueue_script('introjs'); wp_register_style('introjscss', plugin_dir_url(__FILE__) . 'introjs.css'); wp_enqueue_style('introjscss'); wp_register_script('wpintro_custom', plugin_dir_url(__FILE__) . 'custom.js', array('jquery')); wp_enqueue_script('wpintro_custom'); $step_data = get_option('wpi_step_data', ''); $step_data = unserialize($step_data); $step_data = array_values($step_data); $stepdata_array = array( 'steps' => json_encode($step_data), ); wp_localize_script('wpintro_custom', 'stepData', $stepdata_array); } 

Мы использовали admin_enqueue_scripts для включения внутреннего скрипта. wp_enqueue_scripts — рекомендуемое действие для включения скриптов во wp_enqueue_scripts интерфейс. В последнем разделе мы получаем данные шага из базы данных и назначаем их новому файлу JavaScript с именем custom.js в виде строки в кодировке JSON. Наконец, нам нужно создать файл custom.js и включить следующий код для инициализации custom.js продукта.

 jQuery(document).ready(function() { var currentstep = 0; if(QueryString.currentstep){ currentstep = QueryString.currentstep; } var steps_json = stepData.steps; var wip_index=0; steps_json = jQuery.parseJSON(steps_json); jQuery.each(steps_json, function(k, v) { wip_index++; jQuery("#"+v.id).attr("data-step", wip_index).attr("data-intro", v.desc).attr("data-url", v.url); }); jQuery("#flexi_form_start").click(function() { introJs().setOption("doneLabel", "Next page").start().oncomplete(function() { window.location.href = steps_json[currentstep].url + "?multipage=true&currentstep=" + currentstep; }).onbeforechange(function(targetElement) { currentstep = jQuery(targetElement).attr("data-step"); }); }); }); 

Сначала мы устанавливаем текущий шаг на ноль. Мы используем пользовательскую функцию QueryString для получения параметров запроса из URL. Вы можете найти реализацию функции QueryString в папке с исходными кодами.

Затем мы передаем данные шага через функцию jQuery.parseJSON чтобы создать объект JavaScript. Далее мы должны добавить специфические атрибуты данных Intro.js к элементам шага. При циклическом просмотре данных шага мы находим элемент с заданным идентификатором и присваиваем атрибуты данных, используя значения в steps_json

Наконец, мы инициализируем Intro.js по нажатию кнопки, как мы делали в предыдущем уроке. Здесь он немного отличается от предыдущего урока, поскольку мы используем обзор продукта по нескольким страницам вместо отдельной страницы. Следовательно, мы устанавливаем URL-адрес страницы с multipage атрибутом Intro.js после завершения первой страницы. Также мы меняем значение currentstep шага на каждом шаге изменения.

После того как пользователь завершит этапы просмотра продукта на первой странице, он / она будет перенаправлен на следующую страницу с параметром multipage . Давайте посмотрим, как обрабатывать шаги последующих страниц, используя следующий код.

 if (RegExp("multipage", "gi").test(window.location.search)) { var introObj = introJs(); introObj.setOption("doneLabel", "Next page").start().oncomplete(function() { if (steps_json[currentstep]) { window.location.href = steps_json[currentstep].url + "?multipage=true&currentstep=" + currentstep; } }).onbeforechange(function(targetElement) { currentstep = jQuery(targetElement).attr("data-step"); if (steps_json.length <= (parseInt(currentstep) + 1)) { introObj.setOption("doneLabel", "Done"); } }); } 

Мы должны использовать регулярные выражения для фильтрации multipage атрибута, поскольку Intro.js зависит от этого параметра для включения многостраничной поддержки. Внутри оператора if мы должны использовать тот же код, что и раньше, чтобы включить рекурсивную поддержку страниц. Мы используем кнопку завершения в качестве следующей страницы . Мы должны проверить последний этап тура и установить метку « Готово», используя последний раздел кода.

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

  1. Создайте несколько пустых страниц и назначьте контент.
  2. На каждой странице создайте несколько элементов HTML и добавьте идентификаторы.
  3. Перейдите к разделу тура продукта в плагине и выберите ранее созданную страницу.
  4. Повторите предыдущие шаги для всех шагов на всех созданных страницах.
  5. Наконец, добавьте следующий код на одну из страниц и нажмите на ссылку, чтобы начать тур
 <a id="flexi_form_start">Start Tour</a> 

Расширение плагина

Целью данного руководства было познакомить вас с динамическими реализациями продуктовых туров с помощью Intro.js. На данном этапе функциональность этого плагина очень проста, чтобы соответствовать объему этого урока. Вы можете расширить плагин, используя следующие предложения, чтобы сделать его более эффективным на вашем сайте WordPress.

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

Вывод

Этот учебник познакомил вас с динамическими экскурсиями по продукту с Intro.js. Итак, мы интегрировали Intro.js в WordPress для упрощения процесса создания динамического тура по продукту. Вы можете использовать следующие ссылки для загрузки и просмотра демо.

Скачать исходные коды
Предварительный просмотр демо

Дайте нам знать ваш опыт использования Intro.js, а также предложения по улучшению функций этого плагина.