В этом руководстве мы узнаем, как интегрировать 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>
#mount
mounted
Мы также используем свойство 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! строка в консоли браузера:
И вы также должны увидеть скрипт var vm = new Vue({
el: document.querySelector('#mount'),
template: "<h1>My Latest Posts Widget</h1>",
mounted: function(){
console.log("Hello Vue!");
}
});
Теперь давайте изменим плагин для отображения предыдущей строки виджета «Мои последние сообщения» , но на этот раз из 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.rendered
link
setInterval()
Это скриншот результата для меня.
В вашем случае это может выглядеть по-разному в зависимости от вашей активной темы и сообщений, которые вы размещаете на своем сайте 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()