✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Widgets de WordPress: Refactorización, Parte 13

14

Finalmente estamos en la publicación final de la serie sobre la refactorización de WordPress Widget Boilerplate. Al final de esta publicación, habremos terminado la rama de desarrollo de nuestro código y estaremos listos para fusionar todo en la rama maestra.

Sin embargo, todavía queda un poco de trabajo por hacer. A saber :

Lo último que vamos a ver después de esto es reforzar algo de la lógica condicional junto con una palabra sobre el almacenamiento en caché de datos (ya que ya estamos haciendo un poco de eso en publicaciones anteriores).

Esas son las dos cosas que vamos a ver en esta publicación. Específicamente, veremos el manejo de la lógica condicional para el front-end y luego cómo implementar el almacenamiento en caché básico.

El modelo de widget de WordPress: Refactorización Parte 13

Antes de entrar en la ronda final de detalles, quiero asegurarme de que está ejecutando la última versión del código, ya que esta es la única vez en la que creo que es imperativo tener el código listo para la ronda final de cambios.

Entonces, si no tiene el código ejecutándose en su máquina, ahora es el momento. El último fragmento de código en el que tenemos que trabajar es bastante pequeño.

Pero es importante asegurarse de que está ejecutando la última versión. Entonces, una vez que haya extraído el código más reciente, estamos listos para terminar con esto.

1 Representación del front-end

Recuerde que en la publicación anterior, presentamos información general del widget (el título, el contenido y si el título debe mostrarse o no) simplemente mostrando los valores en el front-end.

Pero ahora es el momento de configurar la información para asegurarnos de que no solo vamos a presentar información en función de las opciones en el área de administración del widget, sino también si hay alguna información.

Entonces, comenzaremos con la opción más simple: la opción que nos permite alternar si se muestra el título. En otras palabras, vamos a asumir si los valores están poblados y esa opción está marcada en el backend.

Recuerde, el  archivo Widget.php actualmente se ve así :

<?php

/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */
?>
<div id="<?php echo $args['id']; ?>">
    <h3 class="widget-title"><?php echo $instance['title']; ?></h3>
    <p><?php echo $instance['content']; ?></p>
    <pre><?php echo $instance['display-title']; ?></pre>
</div><!-- #<?php echo $args['id']; ?>-->

Así que vamos a refactorizar esta parte, primero. Por supuesto, es algo relativamente fácil de introducir, ¿verdad? Es decir, la lógica es así:

  • Si la opción para mostrar el título está marcada, mostramos el título; de lo contrario, no lo hacemos.

Esto se puede abordar con una  declaración if simple evaluando el valor de la  opción de título de visualización que tenemos. Debido a la forma en que hemos construido la función a lo largo de esta serie, si la opción está marcada, entonces tiene la opción de encendido ; de lo contrario, está vacío.

Esto significa que podemos configurar un condicional como este en el mismo código que hemos compartido anteriormente :

<?php

/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */
?>
<div id="<?php echo $args['id']; ?>">
  <?php if (isset($instance['display-title']) && 'on' === $instance['display-title']): ?>
        <h3 class="widget-title"><?php echo $instance['title']; ?></h3>
    <?php endif; ?>
    <p><?php echo $instance['content']; ?></p>
</div><!-- #<?php echo $args['id']; ?>-->

De esta forma, si la opción está marcada, se mostrará el título.

Un corolario de esto

Una cosa que creo que vale la pena mencionar es que hay ocasiones en las que las personas pueden activar widgets pero optar por no tener contenido. Claro, puedes argumentar que si hacen eso, entonces es su culpa.

Hay verdad en eso.

Pero también creo que cuidar a los usuarios que pueden estar averiguando cosas o que pueden haber hecho algo accidentalmente que no sabían puede ayudarlos. Tal vez nos haga desarrolladores responsables (o tal vez nos haga más agresivos, elige, estoy con el primero).

Entonces, en este caso, creo que vale la pena asegurarse de que el título y el contenido no estén vacíos. Si lo son, entonces no renderices nada.

El código entonces se ve así :

<?php

/*
 * This file is part of WordPress Widget Boilerplate
 * (c) Tom McFarlin <tom@tommcfarlin.com>
 *
 * This source file is subject to the GPL license that is bundled
 * with this source code in the file LICENSE.
 */
?>

<?php if (empty($instance['title']) && empty($instance['content'])): return;
endif; ?>

<div id="<?php echo $args['id']; ?>">
    <?php if (isset($instance['display-title']) && 'on' === $instance['display-title']): ?>
        <h3 class="widget-title"><?php echo $instance['title']; ?></h3>
    <?php endif; ?>
    <p><?php echo $instance['content']; ?></p>
</div><!-- #<?php echo $args['id']; ?>-->

Y eso terminará con esto en lo que respecta al front-end. Pero, ¿qué pasa con el almacenamiento en caché del que hablamos en una publicación anterior?

2 Introducción al almacenamiento en caché

El almacenamiento en caché, para un widget como este, es algo que considero opcional, pero dado que hemos incorporado la funcionalidad básica en Boilerplate para vaciar el caché, lógicamente sigue para introducir la funcionalidad para almacenar datos en caché, ¿verdad?

Así que hagamos eso. Tampoco debería ser difícil. En realidad, simplemente estamos tomando el título, el contenido y la casilla de verificación y almacenando en caché los valores para la instancia dada del widget.

Para hacer esto, necesitamos ubicar la función del widget y luego hacer lo siguiente:

Primero, presentaremos una función para almacenar en caché el widget :

<?php

/**
 * Caches the values for the instance of this widget.
 *
 * @param array $args     argument provided by WordPress that may be useful in rendering the widget
 * @param array $instance the values of the widget
 */
private function cacheWidget($args, $instance)
{
    $cache = [];
    $cache['widget_id'] = $args['widget_id'];
    $cache['title'] = empty($instance['title'])? '': $instance['title'];
    $cache['content'] = empty($instance['content'])? '': $instance['content'];

    $instance['display-title'] = isset($instance['display-title'])? $instance['display-title']: '';
    $cache['display-title'] = $instance['display-title'];

    wp_cache_set($this->getWidgetSlug(), $cache, 'widget');
}

Luego, presentaremos una función para recuperar la versión en caché del widget :

<?php

/**
 * @return array the cached instance of this widget if it's not empty
 */
private function getCachedWidget()
{
    $cache = wp_cache_get($this->getWidgetSlug(), 'widget');
    if (!empty($cache)) {
        return $cache;
    }
    return [];
}

Luego revisamos la función original para asegurarnos de mostrar lo que se necesita. Si la memoria caché está vacía, no hacemos nada más que mostrar los valores tal como están.

<?php

/**
 * Displays the widget based on the contents of the included template.
 *
 * @param array $args     argument provided by WordPress that may be useful in rendering the widget
 * @param array $instance the values of the widget
 */
public function widget($args, $instance)
{
    // Get a cached version of the widget. If it's empty, cache what we have.
    $cache = $this->getCachedWidget();
    if (empty($cache)) {
        $this->cacheWidget($args, $instance);
    }

    return $this->widgetDisplay->show($args, $instance);
}

Y eso concluye la funcionalidad para el rediseño completo de Widget Boilerplate.

El fin

Este serio en particular ha sido largo. Personalmente, ha sido realmente bueno volver a visitar el modelo estándar de widgets de WordPress y actualizarlo a estándares más modernos.

Todavía hay algunas cosas que debo hacer, como actualizar el archivo README y luego proporcionar algunas instrucciones más antes de fusionarlo con la  rama maestra, pero si ha estado siguiendo toda esta serie, es probable que esté a bordo. con todo. Además, agradezco el tiempo dedicado a esto y espero que haya sido beneficioso para usted en algunos niveles.

Dicho esto, buscaré pasar a contenido premium de forma más corta ya que esta serie y la última fueron bastante largas. Como de costumbre, siempre puede ponerse en contacto conmigo u ofrecer solicitudes de extracción según sea necesario: es de código abierto y también admite mejoras.

Por ahora, sin embargo, esto envuelve esta serie.

Fuente de grabación: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More