Pourquoi utiliser l’approche Trait avec une grande Class ?

Lors de la remise à niveau (et mise au norme WP Code Standards) d’un code source parfois de plus de 10 ans, le problème de fichier d’une classe de près de 10000 lignes s’est posé. En effet, le process phpcs est très lent et il peut être difficile de regrouper les functions ajoutées au fil des années. La répartition en sous-classe ou classe spécifique avec des nouveaux noms n’est pas aisée et demande beaucoup de changements dans les fichiers. En fouillant et cherchant dans la doc et les forums, rares sont ceux qui citent l’approche par des Trait qui ressemblent à une classe très simple en php.

Prenons le cas d’un ensemble de méthode qui gère une page de réglages de l’admin et des functions connexes dans les meta boxes.

On crée un fichier, le Trait est dedans, on y copie ces dites functions. Pas de renommage, la pseudo variable $this reste opérante…

  • L’appel au trait se fait en début de la classe que l’on réorganise avec “use”.

Donc il reste plus qu’à mettre en place le fichier contenant le Trait (de préférence un seul)

Il est requis avant celui de la classe contenant le “use” sinon une erreur fatale est provoquée.

Et maintenant, partie par partie, il est plus aisé de faire évoluer le code notamment du côté admin.

Cet article contient trois blocks en chaque langue

dans les trois blocs, trois textes dans chaque langue :

the block is edited in english.

Ce bloc paragraphe est en français.

Dieser Absatzblock ist in deutscher Sprache.

Si la langue secondaire est cochée, Search trouvera cet article ! ( une fonctionnalité unique de la dernière version du plugin xili-language ! ) Après avoir édité cet article complexe, il est facile de créer et d’éditer ceux dans d’autres langues avec le tableau de bord du plugin (meta-box).

This article contains three blocks in each language

in the three block below, three texts in each language :

the block is edited in english.

Ce bloc paragraphe est en français.

Dieser Absatzblock ist in deutscher Sprache.

If secondary language are checked, Search will find this article ! (an unique features of newest version of xili-language plugin ! After editing this complex article, it is easy to create and edit those in other languages with plugin dashboard (meta box).

Quoi de neuf avec xili-language 2.23.11 ?

La dernière version intègre une meilleure gestion de la metabox des traductions dans le nouvel univers Gutenberg qui bouleverse considérablement l’interface et son mode de dialogue avec la base de données.

Certes, on peut facilement faire des colonnes (par exemple).

Mais, pour le développeur, il faut reconsidérer tous les interfaces qu’on ajoutait pour assister l’éditeur, le rédacteur.

Impossible d’ajouter un simple “input” par quelques lignes de php :

De solides connaissances en JS (réact) sont nécessaires. De plus, c’est d’abord un block a minima qu’il faut ajouter.

Exemple : il était facile d’ajouter la case à cocher pour que le permalien soit adapté selon le titre modifié de l’article traduit. En mode classique, elle était non loin du bouton de mise à jour, mise en ligne. Or, ce n’est plus possible, elle a donc mise sous la liste des traductions. Comme les autres cases de la liste, le mode gutenberg, détecte un changement (cocher, décocher,…) et alors enclanche le processus js, json et met à jour les contenus (et liens entre les diverses traductions).

Exemple illustré

l’image est prise en bas de l’éditeur

la case à cocher est en bas à gauche

Pourquoi coder avec les “WP Coding Standards” ?

Quand des sources de code ont parfois plus de dix ans, il est maintenant temps de les réécrire avec les bonnes pratiques.

La première étape consiste à utiliser des outils efficaces comme WPCS module de PHPCS. Le résultat parle de lui-même avec ces deux instantanés l’écran de l’éditeur Sublime :

php w/o wpcs
php w/o wpcs

php-with-format
php-with-format

Les points rouges sur la première image indiquent les nombreuses erreurs de formatage !

Je vous laisse deviner la masse de travail et de vérifications quand il y près de 30000 lignes dans 4 extensions !