Les utilitaires WP

Faire du WordPress c’est d’abord éviter de réinventer la roue… en moins bien.

De nombreuses fonctions que j’appelle utilitaires ici demeurent sous-employées et AMHA juste parce qu’elles ne sont pas connues. Voici un tour d’horizon par « familles » de fontions.

La plupart des fonctions que nous allons voir sont définies dans /wp-includes/functions.php

🔗 Les __return_*()

C’est assez fréquent de devoir retourner une valeur très simple dans un filtre pour enlever un affichage par exemple avec l’admin bar on a un filtre :

function my_function_admin_bar(){
	return false;
}
add_filter( 'show_admin_bar' , 'my_function_admin_bar');

Mais dans ce cas on ne fait pas grand chose, et surtout on va multiplier les callbacks inutilement dans l’application à chaque fois qu’on va vouloir utiliser un filtre qui fonctionne de la même façon et il y en a beaucoup. Ici ce sera donc plus commode de faire :

add_filter( 'show_admin_bar', '__return_false' );

Voici toutes les variantes possibles pour vos usages en fonction de ce que vous souhaitez retourner :

🔗 Les manipulateurs d’array

🔗 wp_list_pluck()

Très pratique, il permet d’extraire ce qui nous intéresse d’un tableau associatif ou d’objets. Par exemple si nous prenons les posts et que nous les mettons dans une variable :

$_posts = get_posts( [ 'nopaging' => true ] );

Si nous souhaitons simplement extraire les IDs des posts, on pourrait faire un foreach :

$ids = [];
foreach ( $_posts as $_post ) {
    $ids[] = $_post->ID;
}
var_dump( $ids );

mais ce serait un peu long à écrire et fastidieux alors que WP permet d’aller plus vite :

$ids = wp_list_pluck( $ids, 'ID' );

wp_list_pluck() prend un 3ème paramètre depuis la version 4.0.0 de WP :

$ids_titles = wp_list_pluck( $ids, 'post_title', 'ID' );

Ce qui revient à :

$ids_titles = [];
foreach ( $_posts as $_post ) {
    $ids_titles[ $_post->ID ] = $_post->post_title;
}

Mais en 1 ligne !

Source

🔗 wp_list_sort()

@since 4.7.0 attention !

Pour faire du tri sur notre tableau d’objets :

$by_date = wp_list_sort( $_posts, 'post_date', 'DESC' );

Indispensable ! Vous l’aurez compris l’utilitaire trie selon une ou plusieurs propriétés de $_posts, on peut même faire combos de ce type :

$by_date_title = wp_list_sort( $_posts, array(
   'post_date'  => 'DESC',
   'post_title' => 'ASC',
) )

Source

🔗 wp_parse_args()

Le « mergeur », un utilitaire pour faire des array_merge() , WP l’utilise pour permettre l’utilisation de string ET de tableaux notamment dans les paramètres de ses fonctions. De manière générale, le principe est :

function my_function( $args = [] ) {
    $defaults = [ 'is_bibi' => 1 ];
    return wp_parse_args( $args, $defaults );
}

Ce qui me permet d’utiliser la fonction avec des paramètres par défaut à un endroit et avec d’autres paramètres à un autre endroit par exemple.

Source

🔗 Des utilitaires de dates

🔗 date_i18n()

Très puissant pour le multilingue, vous lui filez une date il vous la rend dans chaque langue comme il faut dans le format de votre choix.

Source

🔗 mysql2date()

Fait le combo avec date_i18n() si jamais on lui précise son 3ème paramètre $translate à true. La fonction convertit une date dans le format que vous souhaitez :

$real = mysql2date( 'l, F j, Y', '2016-01-21 06:09:06', true );

Source

🔗 Les outils filesystem

🔗 wp_mkdir_p()

if ( wp_mkdir_p( $path ) ) {
    // do some code
}

La fonction WP checke et tente de poser les bonnes permissions, ce qui augmente souvent nos chances de réussite compte-tenu de… certaines lacunes de config serveur…

Source

🔗 size_format()

Excellent outil qui fait gagner pas mal de temps pour avoir une taille de fichier dans un format lisible et à la bonne unité :

$file_size = 1229; // filesize in bytes
echo size_format( $file_size, $decimals = 2 );
// affiche "1.20 kB"

Source

🔗 wp_ext2type()

Une qui m’avait échappé, apprise en préparant cet article ! La fonction retourne le type du fichier en fonction de son extension. Par exemple « audio » pour des .mp3.

🔗 Les fonctions de formulaire

checked() et selected() sont déjà très connues, si vous ne les utilisez pas, mettez-vous à jour. En revanche je ne connaissais pas disabled() :

<?php $disable_text_field = true; ?>
<input type="text" <?php disabled( $disable_text_field, true ); ?> name="sample_text_field" />

Ce qui peut être utile pour passer un champ en disabled sur la base d’un réglage par exemple de manière dynamique.

🔗 Les fonctions d’URL

🔗 add_query_arg()

Permet d’ajouter des paramètres GET à une URL :

$params = [ 'make' => 'wp', 'is' => 'cool' ];
$url    = add_query_arg( $params, 'https://developer.wordpress.org/' );

donnera :

https://developer.wordpress.org/?make=wp&is=cool

Source

🔗 remove_query_arg()

Si on reprend l’exemple juste au-dessus :

$url_without_params = remove_query_arg( [ 'make', 'wp' ],  'https://developer.wordpress.org/?make=wp&is=cool' );

Source

🔗 Utilitaires d’emails

🔗 is_email()

Évite de se lancer dans des regex imbittables car il le fait pour vous. Il vérifie si l’email est un email valide tout simplement.

Source

🔗 antispambot()

Il convertit un email en un format indigeste pour les spambots et vous permet donc d’afficher un email sur le site et de faire des mailto sans craindre d’être pris pour cible.

Source

🔗 Utilitaires de string

Oui c’est bien le titre lol !

🔗 wp_trim_words()

Permet de raccourcir une chaîne de caractères selon un nombre de mots et non de caractères comme substr() de PHP qui a pour effet de couper les mots en plein vol et ça c’est moche !

Source

🔗 mb_strlen()

Un grand MUST comme dirait les poètes. Evite l’erreur classique de comptabe de bytes au lieu du comptage des caractères ! Et a priori, compter les bytes, qui fait ça ? En plus un caractère peut faire jusqu’à bytes et c’est beaucoup, apparemment toujours plus de bytes… je suis lourd ou bien ? lol

Donc il faudrait faire dans l’absolue miséricorde :

strlen( utf8_decode( $string ) );

Mais comme on n’a pas que ça a faire on utilise mb_strlen().

🔗 wp_extract_url()

D’une chaîne de caractères il extrait toutes les URLs et les met gentillement dans un tableau heart

Source

🔗 Disclaimer

L’article ne se veut pas exhaustif, c’est une sélection perso !