Статьи

Создание плагина WordPress с помощью Vue

В этом руководстве мы узнаем, как интегрировать Vue.js с плагином WordPress, чтобы предоставить нашим пользователям WordPress современный интерфейс.

Vue.js — это очень популярная прогрессивная библиотека JavaScript для создания современных и богатых пользовательских интерфейсов, похожих на Angular и React с точки зрения популярности, производительности и архитектуры на основе компонентов. Мы погрузимся во весь процесс создания очень простого плагина WordPress с интерфейсом Vue, который взаимодействует с WordPress REST API через JavaScript Fetch API.

Мы создадим шорткод, который позволит нам добавить виджет последних опубликованных сообщений на нашем веб-сайте WordPress. Пользовательский интерфейс виджета представляет собой приложение Vue, которое извлекает последние опубликованные сообщения через /wp-json/wp/v2/posts?filter[orderby]=date

Этот урок предполагает некоторое знакомство с Vue.js. Мы увидим, как создать экземпляр Vue, использовать хуки жизненного цикла, такие как mounted()

Создание плагина WordPress

В этом разделе мы увидим, как создать плагин WordPress, который регистрирует шорткод за несколько шагов.

Создать папку в wp-content/plugins

Давайте начнем с создания серверной части нашего плагина. Плагины находятся внутри папки wp-content/plugins Перейдите в эту папку внутри вашей установочной папки WordPress и создайте подпапку для вашего плагина. Давайте назовем это vueplugin

 cd /var/www/html/wp-content/plugins
mkdir vueplugin

Внутри вашей папки плагина создайте файл vueplugin.php

 <?php
/*
Plugin Name: Latest Posts
Description: Latest posts shortcode
Version: 1.0
*/

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

Если вы посетите страницу плагинов в интерфейсе администратора, вы сможете увидеть свой плагин в списке:

Наш новый плагин указан на странице плагинов

Создание шорткода

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

 function handle_shortcode() {
    return 'My Latest Posts Widget';
}
add_shortcode('latestPosts', 'handle_shortcode');

Мы регистрируем шорткод с именем latestPosts .

WordPress предоставляет встроенную add_shortcode() Функция принимает имя в качестве первого параметра и функцию-обработчик, которая обрабатывает логику шорткода и возвращает вывод в качестве второго параметра.

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

Теперь давайте активируем плагин из интерфейса администратора, нажав на ссылку « Активировать» под названием плагина:

Активация плагина

Вы можете использовать [SHORTCODE_NAME]add_shortcode() Текст в скобках — это имя, которое мы передали в качестве первого параметра функции [latestPosts] Он заменяется выводом, возвращаемым функцией PHP, передаваемой как второй параметр.

Чтобы проверить, успешно ли зарегистрирован наш шорткод, мы можем создать новое сообщение и добавить <script>

Тестирование шорткода

Вы должны увидеть предложение « Мои последние сообщения» :

Тестовое предложение вынесено

Теперь вместо отображения статической строки виджета «Мои последние сообщения» давайте отображать последние сообщения с помощью Vue.js.

Интеграция Vue.js с плагином WordPress

В документации Vue перечислены различные способы использования Vue.js. Самый простой — использовать function enqueue_scripts(){
global $post;
if(has_shortcode($post->post_content, "latestPosts")){
wp_enqueue_script('vue', 'https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js', [], '2.5.17');
}
}

Вы можете интегрировать приложение Vue с WordPress за несколько простых шагов:

  • Во-первых, вам нужно добавить элемент DOM в WordPress (например, с помощью шорткода), где вы можете смонтировать приложение Vue.
  • Далее вам нужно поставить в очередь скрипт библиотеки Vue.
  • Наконец, вам нужно создать приложение Vue в отдельном файле JavaScript и поставить его в очередь.

В отличие от традиционного подхода к использованию WordPress, использование Vue.js позволит вам повысить интерактивность и удобство использования. Вместо того, чтобы постоянно обновлять текущую страницу, пользователи могут взаимодействовать со страницей и динамически обновлять интерфейс. Приложения, созданные с помощью Vue.js, называются SPA или одностраничными приложениями. Но в нашем случае вместо создания полного SPA мы будем использовать только Vue.js для создания простого виджета, который можно использовать для отображения информации в небольшой части вашей страницы (например, на боковой панели). Думайте о виджете, созданном с помощью Vue.js, как о маленьком SPA.

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

 wp_enqueue_script()

Сначала мы проверяем, выводим ли мы сообщение, содержащее наш шорткод latestPosts , а затем ставим в очередь скрипт Vue с помощью функции handle_shortcode()

Вы можете проверить, включен ли скрипт, посетив исходный код вашего поста:

Проверка того, что скрипт включен

Затем вернитесь к функции <div><div id="mount"></div>

 latestposts.js

Затем создайте файл ( function() {
var vm = new Vue({
el: document.querySelector('#mount'),
mounted: function(){
console.log("Hello Vue!");
}
});
})();

 Vue()

Мы создаем новый экземпляр Vue с помощью функции el

При создании экземпляра Vue вам также необходимо указать объект параметров , который позволяет предоставлять различные параметры для создания приложения Vue.

В нашем примере мы используем свойство HTMLElement Это может быть либо селектор CSS, либо фактический document.querySelector('#mount') В нашем случае мы используем <div>#mountmounted

Мы также используем свойство mount для предоставления функции, которая будет вызываться после монтирования экземпляра. На данный момент мы регистрируем только Hello Vue! Строка на консоли.

Вы также можете просмотреть полный список доступных опций в справочнике по API .

Далее, как и в библиотеке Vue, вам нужно поставить этот файл в очередь. Внутри функции enqueue_scripts()

 wp_enqueue_script('latest-posts', plugin_dir_url( __FILE__ ) . 'latest-posts.js', [], '1.0', true);

plugin_dir_url() __FILE__latest-posts.js Это позволит нам получить абсолютный путь к файлу latest-posts.js

В этот момент вы должны увидеть Hello Vue! строка в консоли браузера:

Привет Vue! строка в консоли браузера

И вы также должны увидеть скрипт var vm = new Vue({
el: document.querySelector('#mount'),
template: "<h1>My Latest Posts Widget</h1>",
mounted: function(){
console.log("Hello Vue!");
}
});

Сценарий latest-posts.js, включенный в исходный код

Теперь давайте изменим плагин для отображения предыдущей строки виджета «Мои последние сообщения» , но на этот раз из Vue. В вашем экземпляре Vue добавьте свойство шаблона с любым HTML-кодом, который вы хотите отобразить:

 data

Теперь давайте извлекать и отображать последние сообщения с помощью API извлечения.

В экземпляре Vue добавьте свойство var vm = new Vue({
el: document.querySelector('#mount'),
data: {
posts: []
},

  var url = '/wp-json/wp/v2/posts?filter[orderby]=date';
 fetch(url).then((response)=>{
    return response.json()
  }).then((data)=>{
    this.posts = data;
  })

Далее, давайте включим код для извлечения последних сообщений в смонтированном событии жизненного цикла, которое запускается при монтировании компонента в DOM:

 fetch()

Мы вызываем метод JavaScript posts После успешного разрешения Promise мы присваиваем данные массиву template: `<div><h1>My Latest Posts</h1>
<div>
<p v-for="post in posts">
<a v-bind:href="post.link">{{post.title.rendered}}</span></a>
</p>
</div>
</div>
`
,

Наконец, добавьте свойство шаблона :

 v-for

Мы используем директиву Vue title.renderedlinksetInterval()

Это скриншот результата для меня.

Пример результата

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

Если вы нажмете на заголовок сообщения, вы попадете на страницу сообщения.

Мы можем добавить больше функций в наш виджет, например, выборку данных в режиме реального времени, чтобы пользователю не нужно было перезагружать страницу для получения последних опубликованных сообщений. Мы можем добиться этого, постоянно опрашивая конечную точку WP-API с помощью метода JavaScript var vm = new Vue({
/*...*/

methods:{

fetchPosts: function(){
var url = '/wp-json/wp/v2/posts?filter[orderby]=date';
fetch(url).then((response)=>{
return response.json()
}).then((data)=>{
this.posts = data;
console.log(this.posts);
});
}
},

Во-первых, переместите код, который выбирает сообщения в своем собственном методе:

 methods

Мы используем свойство this После этого вы можете получить доступ к этим методам непосредственно в экземпляре.

Затем в функции mounted()

  var vm = new Vue({
  /*...*/
 mounted: function() {
   console.log("Component is mounted");

   this.fetchPosts();
   setInterval(function () {
    this.fetchPosts();
   }.bind(this), 5000);
 }

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

Вывод

В этом уроке мы увидели, как создать плагин WordPress, который использует библиотеку Vue.js. Мы создали шорткод, который можно использовать для отображения компонента Vue в ваших сообщениях и страницах, который выбирает и отображает последние сообщения каждые пять секунд. Это было достигнуто с помощью опроса WordPress REST API с помощью метода setInterval()