Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Widgets WordPress : refactorisation, partie 13

15

Nous sommes enfin au dernier article de la série sur la refactorisation du WordPress Widget Boilerplate. À la fin de cet article, nous aurons terminé la branche de développement de notre code et nous serons prêts à tout fusionner dans la branche principale.

Il reste cependant encore un peu de travail à faire. A savoir :

La dernière chose que nous allons examiner après cela est de resserrer une partie de la logique conditionnelle avec un mot sur la mise en cache des données (puisque nous en faisons déjà un peu dans les articles précédents).

Ce sont donc les deux choses que nous allons examiner dans cet article. Plus précisément, nous allons examiner la gestion de la logique conditionnelle pour le frontal, puis la mise en œuvre de la mise en cache de base.

Le passe-partout du widget WordPress : refactorisation de la partie 13

Avant d’entrer dans la dernière série de détails, je veux m’assurer que vous exécutez la dernière version du code car c’est la seule fois où je pense qu’il est impératif que le code soit prêt pour la dernière série de modifications.

Donc, si vous n’avez pas le code en cours d’exécution sur votre machine, c’est le moment. Le dernier morceau de code sur lequel nous devons travailler est assez petit.

Mais il est important de vous assurer que vous utilisez la dernière version. Donc, une fois que vous avez extrait le dernier code, nous sommes prêts à conclure.

1 Rendu du Front-End

Rappelez-vous dans le post précédent, nous avons rendu les informations générales du widget – le titre, le contenu et si le titre doit être affiché ou non – en affichant simplement les valeurs sur le front-end.

Mais maintenant, il est temps de configurer les informations pour s’assurer que nous n’allons pas seulement rendre les informations en fonction des options de la zone d’administration du widget, mais aussi s’il y a des informations.

Nous allons donc commencer par l’option la plus simple: L’option qui nous permet de basculer si le titre est affiché. En d’autres termes, nous allons supposer que les valeurs sont renseignées et que cette option est cochée dans le backend.

Pour rappel, le fichier Widget.php ressemble actuellement à ceci :

<?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']; ?>-->

Nous allons donc d’abord refactoriser cette partie. Bien sûr, c’est une chose relativement facile à introduire, n’est-ce pas? C’est-à-dire que la logique est la suivante :

  • Si l’option d’affichage du titre est cochée, nous affichons le titre ; sinon, nous ne le faisons pas.

Cela peut être résolu avec une simple  instruction if en évaluant la valeur de l’  option display-title que nous avons. En raison de la façon dont nous avons construit la fonction tout au long de cette série, si l’option est cochée, elle a l’option on ; sinon, c’est vide.

Cela signifie que nous pouvons configurer une condition comme celle-ci dans le même code que nous avons partagé ci-dessus :

<?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']; ?>-->

Ainsi, si l’option est cochée, le titre sera affiché.

Un corollaire à ceci

Je pense qu’une chose qui mérite d’être mentionnée est qu’il y a des moments où les gens peuvent activer des widgets mais choisir de n’avoir aucun contenu. Bien sûr, vous pouvez dire que s’ils font cela, c’est de leur faute.

Il y a du vrai là-dedans.

Mais je pense aussi que prendre soin des utilisateurs qui peuvent comprendre des choses ou qui ont peut-être accidentellement fait quelque chose qu’ils ne savaient pas peut les aider. Peut-être que cela fait de nous des développeurs responsables (ou peut-être que cela nous rend plus agressifs – faites votre choix, je suis avec le premier).

Donc, dans ce cas, je pense qu’il vaut la peine de s’assurer que le titre et le contenu ne sont pas vides. Si c’est le cas, ne rendez rien.

Le code ressemble alors à ceci :

<?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']; ?>-->

Et cela conclura cela en ce qui concerne le front-end. Mais qu’en est-il de la mise en cache dont nous avons parlé dans un article précédent ?

2 Présentation de la mise en cache

La mise en cache, pour un widget comme celui-ci, est quelque chose que je considère comme facultatif, mais puisque nous avons intégré la fonctionnalité de base dans le Boilerplate pour vider le cache, il s’ensuit logiquement d’introduire la fonctionnalité de mise en cache des données, n’est-ce pas ?

Alors faisons ça. Cela ne devrait pas être difficile non plus. En réalité, nous prenons simplement le titre, le contenu et la case à cocher et mettons en cache les valeurs pour l’instance donnée du widget.

Pour ce faire, nous devons localiser la fonction du widget, puis procéder comme suit :

Tout d’abord, nous allons introduire une fonction pour mettre en cache le 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');
}

Ensuite nous introduirons une fonction pour récupérer la version en cache du 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 [];
}

Ensuite, nous revisitons la fonction d’origine pour nous assurer que nous affichons ce qui est nécessaire. Si le cache est vide, nous ne faisons rien d’autre que d’afficher les valeurs telles qu’elles sont.

<?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);
}

Et cela résume la fonctionnalité du Widget Boilerplate entièrement remanié.

La fin

Ce sérieux particulier a été long. Personnellement, cela a été vraiment bien de revoir le WordPress Widget Boilerplate et de le mettre à des normes plus modernes.

Il me reste encore quelques choses à faire, comme mettre à jour le fichier README, puis fournir quelques instructions supplémentaires avant de le fusionner dans la  branche principale, mais si vous avez suivi toute cette série, alors vous êtes probablement à bord avec tout. De plus, j’apprécie le temps que vous y avez passé et j’espère que cela vous a été bénéfique à certains niveaux.

Cela dit, je chercherai à passer à un contenu premium plus court, car cette série et la dernière ont été assez longues. Comme d’habitude, vous pouvez toujours me contacter ou proposer des demandes d’extraction si nécessaire – c’est open source et il accueille également des améliorations.

Pour l’instant, cependant, cela conclut cette série.

Source d’enregistrement: 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