Crear un tema de WordPress usando la API REST y Vue.js
admin
June 9, 2022
GUÍA
6 Views

Después de asistir a la conferencia del día de descanso hace unas semanas, me inspiré a ir a la API REST de WordPress y probarla. El día en que Jack Lenox de Automatic celebró una conferencia titulada “allí y de regreso: una historia de desarrollador” en la que describió su experiencia en la construcción de un tema de WordPress utilizando el resto y reaccionar API. Sus perspectivas fueron interesantes y claramente declararon algunos de los desafíos de crear un tema de WordPress como una aplicación de una sola página:
Optimización para motores de búsqueda (SEO)
Código/servidor del cliente de partición
Historial del navegador
Analítica
La velocidad de la tarea inicial
Algunos de estos problemas son más fáciles de superar que otros. Por ejemplo, el historial del navegador se puede implementar en JS utilizando API de Historial, y Google Analytics tiene un seguimiento de aplicaciones de una sola página.
Por otro lado, la partición del código del cliente/servidor es un poco más complejo, porque no desea recrear sus plantillas en la parte posterior y en el frente en diferentes formatos. Una forma de evitar esto es usar NodeJS para reproducir plantillas en el servidor y usar la misma plantilla en el frente, pero esto tiene la desventaja de que debe ejecutar NodeJs con PHP. El SEO es, para ser entendido, un problema importante para la mayoría de las personas y, si bien la mayoría de los grandes motores de búsqueda acceden a los rastreadores que JavaScript se reproduce hasta cierto punto, los resultados no son excelentes y la mayoría de las redes sociales no accederán con el contenido de rastreadores. Cuando se distribuya eso.
El rendimiento es importante y uno de los otros grandes problemas de aplicaciones de una página es la velocidad de carga inicial. Jack llegó tan lejos que sugirió la generación automática de archivos de plantilla PHP de las plantillas de JavaScript como una forma de acelerar las cosas (es decir, dejar que el servidor repita la carga inicial de la página y dejar que JavaScript tome el control una vez que está cargado), lo que hizo la mayor parte de la gente en la habitación (y con razón). Plan de acción Después de tener en cuenta estos problemas y posibles soluciones, decidí ver si podía construir un WordPress simple usando el REST y VUE.JS API.J. Vue es similar al hecho de que ambas ofrecen componentes reactivos y componentes de vista, pero, como puede esperar, la implementación difiere en muchos aspectos. Todo el código en este artículo y todo el tema de trabajo se puede encontrar en el almacén de GitHub si lo desea. para ver y romper su propio tema. Entonces, ¿cómo lidiaré con los problemas relacionados con la partición del cliente/servidor, SEO y código de rendimiento? Básicamente, el plan es crear un tema básico de WordPress muy simple, que eliminará el contenido sin joyería para la página que se ve, luego Bootstrap Vue para alimentar el sitio después de la carga inicial de la página. Esto permitirá que los motores de búsqueda tengan acceso a los rastreadores para la página dada, mientras que los usuarios reales no verán el contenido reproducido desde el servidor y solo verá la aplicación VUE. Luego usaremos Vue-Router para administrar la navegación del sitio (incluido el historiador y el botón de retroceso) y Vue-Resource para administrar el contenido de la API de WordPress.
El lado de WordPress WordPress del tema solo incluirá tres archivos:
Style.css: incluye metainformaciones del tema utilizado por WordPress y Styles Global.
Functions.php-Usado para hacer cola nuestros scripts y estilos e información de salida que no podemos tomar de la API REST.
Index.php: muestra el contenido HTML básico de la página para ser accesible con los rastreadores por los motores de búsqueda.
Aquí está el código index.php: <html <link re = "pingback" href = "<? (); ? single_post_title ('', falso). '
‘; } while (have_posts ()): the_post (); if (is_singular ()) {the_itle (‘
‘, ‘
‘); } else {the_itle (‘
<a href = "'. } El contenido (); Giro Terminara si; ? ? La aplicación VUE será Bootstrap en Div #App. Sobre ambos para el lado de WordPress del tema.
Parte Vue La parte de Vue del tema se puede encontrar en la carpeta REST-Theme.La aplicación VUE se crea en el archivo src/main.js.Aquí creamos el componente principal de la aplicación con una plantilla simple: Template: ' +’
<
‘ +’ ‘, los componentes de Header de tema se definen en sus propios archivos.El componente de visión del enrutador es utilizado por la biblioteca Vue-Router para reproducir cualquier componente que se transmita para la página actual.

Un problema que encontré mientras construía el tema fue cómo recrear rutas de WordPress en Vue. Para sitios más grandes, es probable que use los componentes async de Vue para cargar rutas solo cuando sea necesario, pero para un sitio pequeño decidí simplemente eliminar todas las rutas usando wp_localise_script en funciones.php: function REST_THEME_SCRIPTS () ours ‘=> get_bloginfo ( ‘name’), ‘rutas’ => REST_THEME_ROUTES (),)); } add_action (‘wp_enqueue_scripts’, ‘REST_THEME_SCRIPT’); Función REST_THEME_ROUTES () {$ rutas = array (); $ Query = new wp_query (array (‘post_type’ => ‘any’, ‘post_statush’ => ‘pub’, ‘posts_per_page’ => -1,)); if ($ query-> have_posts ()) {while ($ query-> have_posts ()) {$ query-> the_post (); $ rutas [] = array (‘id’ => get_the_id (), ‘type’ => get_post_type (), ‘slug’ => basename (get_permalink ()),); }} wp_reset_postata (); devolver $ rutas; } Esto mostrará las rutas en la carga inicial de la página que luego podemos usar para iniciar nuestras rutas en nuestro enrutador VUE:
para (clave de lima en wp.routes) {var ruta = wp.rutes [clave]; enruter.on (ruta.slug, {componente: vue.com (capitalize (ruta.type)), postid: ruta.id}); } Luego creé componentes que corresponden a Route.Type (publicaciones y páginas en este caso). Estos componentes individuales se ocupan de hacerse cargo del contenido de la API REST y reproducir la salida. Por ejemplo:
{{post.title.rendred}}
{{post.title.rered}}
{{{post.content.rendered}}}
exportar default {props: {post: {type: object, default () {return {id: 0, slug : ”, título: {rendered: ” ‘}, content: {rendered:’ ”}}}}, listos () {// Si la publicación no ha sido aprobada por if (! this. post.id) {this .getPost (); this.issingle = true; }}, date () {issingle: false}, métodos: {getPost () {this. $ http.get (wp.root + ‘wp/v2/posts/’ + this. $ ruta.postid) .then (función (Respuesta) {this.post = respuesta.data; this. $ shottt (‘page-title’, this.post.title.rered);}, function (respuesta) {// error console.log (respuesta);} ); }}} Recuerde que uso el formato Vueify aquí para los componentes de un solo archivo y JavaScript Ecmascript 6.
Otro problema que apareció fue actualizar el elemento de título de la página cuando cambia las páginas en la aplicación. Decidí usar el método VUE de envío para enviar una actualización al componente principal que actualizaría el título: // en el componente infantil … esto. // En los métodos de componentes de la aplicación: {updateTitle (pageTitle) {document.title = (PageTitle? Paggetitle + ‘:’ ‘) + wp.site_name; }}, Eventos: {‘Page-title’: function (pageTitle) {this.updateTitle (pageTitle); } } ¿Que sigue? En esta etapa, el tema es muy simple y hay muchas más cosas que mejorar, que incluyen: implementar menús de WordPress en lugar de tomar solo una lista de páginas
Memorización de caché para no continuar accediendo al resto si ya tenemos datos
Implementación de Google Analytics
Implementar indicadores de carga y transiciones
Componentes de publicación/página más avanzados
Mucho más…
De todos modos, espero que este artículo ofrezca al menos una perspectiva y un punto de partida para crear sus propios temas de WordPress impulsados por el resto. Logré superar la mayoría de los obstáculos que enfaticé al comienzo del artículo, pero eso no significa que no haya mejores formas de evitar estos problemas. Recuerde el tema del trabajo y todo el código se puede encontrar en el almacén de GitHub.
¿Has intentado construir un tema de WordPress con la API REST? ¿Cuál fue tu experiencia?
Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.