Cómo crear un widget de WordPress con columna vertebral

Hay muchos tutoriales en línea sobre la creación de widgets personalizados, pero desafortunadamente la mayoría de ellos rara vez exceden los elementos básicos. Es por eso que, en el tutorial de hoy, le mostraré cómo construir un widget para soporte para un número ilimitado de testimonios. El problema con los campos repetidos es que debe cuidar el nombre de los campos, lo que puede ser difícil. Hay dos posibles soluciones para resolver este problema y, para fines de aprendizaje, lo haremos de la manera difícil: con la columna vertebral. Es un marco fácil de JavaScript que le permite escribir fácilmente aplicaciones frontend. Por supuesto, podríamos usar jQuery para esto, pero apoyarme, una vez que terminemos, estarás agradecido de no haberlo hecho.
Cree y ponga el archivo JavaScript necesario en la cola antes de comenzar, algunos trabajos estándar están en orden; Necesitamos crear un nuevo archivo JavaScript (en la carpeta JS de su base) y administrarlo. Then glue the following code in functions.php you.:/** * enqueue admin testimonials javascript */function testimonials_enqueue_scripts () {wp_enqueue_script (‘admin-testimonials’, get_template_directory_uri (/js/admin testimonials’, (‘JQUERY’, ‘ Subrayado ‘,’ Backbone ‘)); } add_action (‘admin_enqueue_scripts’, ‘testimonials_enqueue_scripts’); Además de nuestro archivo recién creado, también necesitamos una serie de adicciones, en nuestro caso necesitamos Backbone, que ya está en el paquete con WordPress, ¡bastante cuidado!
Defina la clase entonces, necesitamos crear un nuevo archivo, llamado clase testimonial-widget.php, colóquelo en el directorio Inc de su base y preguntarlo desde funciones.php: / ** * cargar widget testimonial * / reequire get_template_directory ( ). ‘/inc/class testimonial-widget.php’; Abra el archivo, porque en él, definiremos una nueva clase para nuestro widget de testimonio e ingresaremos el siguiente código: mis testimonios widget ‘)); } Si no lo sabía, un constructor es un método especial que se llama automáticamente cuando la clase está instantánea (con una nueva palabra clave). Hay muchas opciones que puede enviar al constructor matriz (construcción wp_widget :: __) , Pero para el propósito de este tutorial, mantengamos las cosas concisas. Cuando guarda el método, así es como muestra el tablero de widget:
Nuestro nuevo widget de botón de testimonio define el método de actualización adicional, para definir el método que será responsable de la seguridad. Cuando acepta cualquier tipo de entrada de sus usuarios, siempre es recomendable desinfectar adecuadamente los datos. Este ejemplo es básico, pero debería darle un buen punto de partida:
Public Function Update ($ new_instance, $ Old_Instance) {$ instance = array (); $ instancia [‘header’] = wp_kses_post ($ new_instance [‘Header’); $ instancia [‘testimonials’] = $ new_instance [‘testimonios’]; devolver $ instancia; }

Aquí, creamos una nueva matriz que contendrá el encabezado de la cancha y otra matriz con todos nuestros testimonios.
En este caso, el tribunal es una copia única del widget, porque podría tener más widgets del mismo tipo en diferentes barras laterales. Cada uno sería una instancia. Tema: En este método, decidí desinfectar solo el encabezado, pero transmitir todos los testimonios tal como son. Cuando haya terminado con este tutorial, realice todos los testimonios y aplique una de las funciones de desinfección aceptadas por WordPress. Empieza aqui. Defina el método de reproducir el formulario WP-Admin ahora en la parte más importante: el formulario de testimonio. En él, debemos lidiar con las siguientes responsabilidades: tomar datos o establecer valores predeterminados si aún no hay datos
Muestre cualquier campo que no repita (como el encabezado) si los tenemos
Como usamos Backbone (JavaScript), también debemos definir una plantilla para ser utilizado para cada testimonio individual
Muestre un sustituto, al que se adjuntarán todos los testimonios.
Inicializar los datos que se hacen cargo una vez que están dispuestos
Copie el siguiente método en la clase (explicación a continuación):
Formulario de función pública ($ instancia) {// segmento #1 $ header = vacía ($ instancia [‘header’)? ‘Testimonios’: $ instancia [‘encabezado’]; $ header = vacía ($ instancia [‘encabezado’)? ‘Testimonios’: $ instancia [‘encabezado’]; $ testimonials = isset ($ instancia [‘testimonios’))? array_values ​​($ instancia [‘testimonios’))? array_values ​​($ instancia [‘testimonials’): array (array (‘id’ => 1, ‘cita’ => ”, ‘autor’ => ”, ‘imagen’ => ‘);?>
<etiqueta for = " get_field_id (‘header’);? (‘testimonials’);?>–cita “> cita: <texture rows =" 4 "class =" wideFat "id =" get_field_id (‘ testimonios ‘);?>–quote “name =” get_field_name (‘ testimonials ‘);?>? [] [cita] “>
for = ” get_field_id (‘testimonials’);?>–autor”> autor : <input class = "
WideFat "id =" get_field_id (‘testimonials’);?? Get_field_name (‘testimonios’);? Class = “pashicons pashicons-dismiss”> eliminación de testimonios
<div id = "JS testimonials- Id;?Antecedentes: #fafafa; “>
<a href="#ication class="button" id="js-testimonials-addd nin testimonial
< lima testimonialsjson = <?, testimonialsjson);
En el primer segmento, definimos un encabezado que se utilizará en el delantero. Podría agregar fácilmente más campos aquí, por ejemplo, si tuviera una diapositiva con estos testimonios (como uno en nuestra página de inicio, entonces podría agregar algunas opciones de configuración de control deslizante, como el rango de ciclo. El segmento #2 solo reproduce esos campos . Segmento #3 es el lugar donde las cosas se vuelven interesantes. Puede haber notado que todos los resultados aquí están envueltos en una etiqueta . Debido a que usamos la troncal para jugar campos repetitivos, necesita una plantilla para aplicar a cada objeto ( Testimonio en nuestro caso). Usamos dos campos para este tutorial (cita y autor, pero puede usar tanto como desee poder eliminar un testimonio, el último elemento es un botón para hacer exactamente eso. Es posible que haya notado que tiene un parámetro HREF vacío; esto se debe a que usaremos JavaScript para hacer una llamada asíncrona. Toror de los testimonios para aparecer. Aparte de eso, decidí jugar el nuevo botón de testimonio aquí, pero no dude en ponerlo en otro lugar. En el último, quinto segmento, creamos un objeto JSON a partir de nuestros testimonios existentes y luego llamamos a una función que los reproducirá (más al respecto pronto). Enviamos la identificación de Widget Court y el objeto JSON. Si intenta actualizar el tablero de widgets en este momento, la consola informará los errores de JavaScript, porque nuestra función de repopulateMonials aún no existe. Antes de definirlo, primero …
Defina el método de reproducir el sitio web Este es el último método y se utiliza para mostrar nuestros testimonios en una barra lateral: widget de función pública ($ args, $ instancia) {$ header = apply_filters (‘widget_itle’, vacía ($ instancia [header ‘])?’ ‘: $ instancia [‘ encabezado ‘], $ instancia, $ this-> id_base);?]?>

– <? = $ testimonial ['autor']?} No hay demasiadas explicaciones aquí, aplique el filtro estándar a nuestro encabezado y muestrelo, luego viaja todos los testimonios y muestre tanto la cita como su autor.

Ahora es el momento de vestir nuestra chaqueta JavaScript e ingresar al hermoso mundo de la columna vertebral, no dude en cerrar el archivo PHP, porque ya no la necesitaremos. La columna vertebral de nuestro widget le recuerda a administrador-testimonials.js que creamos anteriormente? Haremos que la magia suceda aquí. Si no está familiarizado con Backbone, no tenga miedo, lo que haremos aquí es bastante simple, pero si no comprende algunas partes, visite su documentación oficial, es solo una página (aunque bastante larga). El primer paso que tomaremos es crear un espacio de nombre: var myWidgets = myWidgets || {}; Si no está familiarizado con esta técnica, es una forma de organizar su código para que no contamine el espacio de nombres global; lea más al respecto en este artículo. Ahora, antes de comenzar a escribir cualquier código para nuestros testimonios, vale la pena verificar todos los requisitos: necesitamos una forma de guardar y referirnos a cada testimonio.
Necesitamos actualizar un testimonio.
Necesitamos crear un nuevo testimonio o eliminar uno existente.

En el mundo del desarrollo, una entidad que representa un objeto arbitrario generalmente se llama modelo, y Backbone acepta el modelado de datos del cuadro: mywidgets.testimonial = backbone.model.extem ({defaults: {‘cita’: ” , ‘autor’: ”}}); Aquí, definimos un modelo testimonial, que extiende el comportamiento predeterminado que configura el backbone para el modelo, un ejemplo es la clave predeterminada que no siempre es necesaria, pero puede ayudarnos a identificar visualmente nuestro esquema de datos. Primer requisito resuelto. Ahora tenemos que definir dos puntos de vista. Uno se ocupará del testimonio individual y su comportamiento, y el otro asegurará que toda la lista esté en orden. Una visualización, en la terminología JavassRipt/Backbone significa una lógica que se utiliza para manipular la salida de un elemento (o grupo de ellos). Por lo general, hay una confusión en este sentido, porque en la mayoría de los idiomas en el lado del servidor, una vista es el HTML jugado, pero la lógica de reproducción se llama controlador o presentador. Y la visualización se llama la plantilla. Saber. Un desastre. En primer lugar, debemos crear la visualización única, responsable de cada testimonio individual: mywidgets.testimonialview = backbone.view.extem ({classname: ‘testimonial-widget’, eventos: {click .js-remove-testimonial ‘:’ destruir ‘}, inicializar: function (params) {this.template = params.template; this.model.on (‘ Change ‘, this.render, this); devuelve esto;}, render: function () {this. $ el. .html (this.template (this.model.attributes)); devuelve esto;}, destruye: function (ev) {ev.preventdafault (); this.remove (); this.model.trigger (‘destruir’
);},});Superemos lo que hace este punto de vista: ClassName define una clase para cada testimonio individual de nuestra lista (si tiene que elegir)
Los eventos definen una lista de eventos y acciones apropiados que deben activarse en la producción de eventos.
Inicializar se llama cada vez que se crea un nuevo testimonio (con JavaScript).Se espera que reciba un parámetro de plantilla y también adjunte un oyente para que lo repite si se produce un cambio.
Render construye el HTML uniendo los datos con la plantilla
Destruir los datos de HTML y asociados
Ahora que hemos tratado con un testimonio individual, para centrarnos en la vista de la lista:
mywidgets.testimonialSview = backbone.view.extem ({eventos: {haga clic #js-testimonials-add ‘:’ addnew ‘, inicialize: function (params) {this.widgetid = params.id; this. $ testimonials = this. (‘#js-testimonials-list’); this.testimonials = new backbone.collection ([], {modelo: mywidgets.testimonial}); this.listento (this.testimonials, ‘add’, this.appendon); return; esto;}, addnew: function (ev) {ev.preventDefault (); lima testimonialid = 0; if (! this.testimonials.isEmpty ()) {var testimonialswithmaxid = this.testimonials.max (function (testimonial) {retorno testimonial .id;}); testimonialId = parsInt (testimonialswithaxid.id, 10) + 1;} var modelo = mywidgets.testimonial; this.testimonials.add (nuevo modelo ({id: testimonialid}); devuelve esto;}, apéndone: función (testimonial) {VA RendendTestimonial = new mywidgets.testimonialView ({modelo: testimonial, plantilla: _.template (‘#js-testimonial-‘ + this.widgetid) .html (),}). render (); this. $ testimonios. append (renderedTestimonial.el); this. $ testimonials.append (rendendTestimonial.el); devolver esto; }}); Ver la lista es un poco más compleja, ya que administra la adición de un nuevo testimonio y elimina los existentes:
Inicialice, como en el caso de la vista única, se llama automáticamente cuando lo instanté, y guarda todos los testimonios, tanto como el objeto DOM y como una colección (tenga en cuenta el carácter de $). También escucha la colección y trigan la función de ADD cada vez que se agrega un nuevo objeto de testimonio a la colección.
AddNew se activa cada vez que hacemos clic en el botón “Agregar nuevo”, y esto se define en nuestro objeto de evento. También se asegura de que almacene la ID (cada una de las cosas un incremento), como puede imaginar, cree una nueva vista con el testimonio que transmitimos y anexa a DOM.
En este momento, todavía nos faltan un elemento esencial y esta es la función de los estetimonios que llamamos desde la plantilla de PHP que primero definimos: mywidgets.repopulateTimonials = function (id, json) {testimonialSview = new mywidgets.testimonialsw ({id::: id, él: ‘#js-testimonials-‘ + id,}); testimonialsview.testimonials.add (json); }; Todo lo que hacemos aquí es crear nuestra visualización de la lista, pasando la ID (útil si usamos más de una instancia de nuestro widget en la misma barra lateral) y el elemento que queremos adjuntar a la lista. Finalmente, presionamos todos nuestros testimonios existentes. Guarde el archivo y actualice el tablero con widgets, si lo ve, ¡luego acaricia el trabajo de regreso bien hecho!

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *