Methode de la classe $wpdb pour creer des requetes SQL parametrees dans WordPress. Equivalent des prepared statements PDO, adapte a l'ecosysteme WP.
Comme un coffre-fort avec une serrure a combinaison : les donnees ne peuvent pas s'echapper du cadre prevu.
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->posts}
WHERE post_author = %d AND post_status = %s",
$authorId, 'publish'
)
);Cas d'usage : Pour toute requete SQL directe dans WordPress qui inclut des variables.
Hook qui permet d'executer du code a un moment precis du cycle WordPress (init, wp_head, save_post, etc.). Ne retourne pas de valeur.
Comme une alarme programmee : quand elle sonne, tu executes l'action prevue.
add_action('save_post', function(int $postId): void {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
update_post_meta($postId, '_custom_field', 'value');
}, 10, 1);Cas d'usage : Pour executer du code en reaction a un evenement WordPress : creation de post, login, activation de plugin.
Piege de performance ou trop d'options avec autoload=yes sont chargees en memoire a chaque requete. Une table wp_options volumineuse ralentit tout le site.
Comme charger TOUS tes dossiers dans ton sac chaque matin au lieu de prendre seulement ceux du jour.
// Mauvais : autoload par defaut = yes
update_option('huge_data', $bigArray);
// Bon : desactiver autoload
update_option('huge_data', $bigArray, false);
// Audit
// SELECT SUM(LENGTH(option_value)) FROM wp_options
// WHERE autoload = 'yes';Cas d'usage : Lors de l'audit de performance d'un site WordPress lent au premier chargement.
Systeme de permissions WordPress ou les roles (admin, editor, author) regroupent des capabilities (edit_posts, manage_options). Controle l'acces aux fonctionnalites.
Comme les badges d'acces dans une entreprise : le directeur ouvre toutes les portes, le stagiaire quelques-unes.
// Verifier une capability
if (!current_user_can('edit_posts')) {
wp_die('Acces interdit');
}
// Ajouter un role custom
add_role('moderator', 'Moderateur', [
'read' => true, 'edit_posts' => true,
]);Cas d'usage : Pour controler finement qui peut faire quoi dans l'admin et via l'API REST.
Verification systematique des permissions utilisateur avant toute action sensible via current_user_can(). Pilier de la securite WordPress.
Comme un vigile qui verifie le badge avant de laisser entrer dans une zone restreinte.
add_action('wp_ajax_delete_item', function() {
if (!current_user_can('delete_posts')) {
wp_send_json_error('Non autorise', 403);
}
check_ajax_referer('delete_item_nonce');
// Suppression securisee
});Cas d'usage : Avant toute action admin : CRUD, changement de settings, acces aux donnees sensibles.
Theme qui herite de toutes les fonctionnalites d'un theme parent et permet de le personnaliser sans modifier ses fichiers. Les mises a jour du parent sont preservees.
Comme customiser une voiture de serie : on ajoute des options sans modifier la carrosserie d'origine.
/* style.css */
/*
* Theme Name: Mon Theme Enfant
* Template: theme-parent
*/
// functions.php
add_action('wp_enqueue_scripts', function() {
wp_enqueue_style('parent', get_template_directory_uri() . '/style.css');
});Cas d'usage : Pour personnaliser un theme tiers tout en conservant la possibilite de le mettre a jour.
Type de contenu personnalise au-dela des posts et pages natifs. Permet de modeliser des entites metier (produits, evenements, temoignages) avec leur propre interface admin.
Comme ajouter un nouveau type de classeur dans une armoire de bureau : factures, devis, contrats.
register_post_type('product', [
'labels' => ['name' => 'Produits'],
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail'],
'show_in_rest' => true,
]);Cas d'usage : Quand le contenu ne correspond pas aux posts/pages natifs : portfolio, evenements, FAQ, produits.
Systeme de classification personnalise pour organiser les contenus au-dela des categories et tags natifs. Peut etre hierarchique ou plate.
Comme creer un nouveau systeme d'etiquettes dans une bibliotheque : par couleur, par taille, par theme.
register_taxonomy('brand', ['product'], [
'labels' => ['name' => 'Marques'],
'hierarchical' => false,
'show_in_rest' => true,
'rewrite' => ['slug' => 'marque'],
]);Cas d'usage : Pour classifier les CPT : marques de produits, lieux d'evenements, niveaux de difficulte.
Fonctions d'echappement WordPress adaptees au contexte de sortie : esc_html pour le contenu, esc_attr pour les attributs HTML, esc_url pour les URLs.
Comme des combinaisons de protection differentes selon l'environnement : labo, chantier, ou cuisine.
<a href="<?php echo esc_url($link); ?>">
<?php echo esc_html($title); ?>
</a>
<input value="<?php echo esc_attr($value); ?>">
<?php echo wp_kses_post($html_content); ?>Cas d'usage : A chaque affichage de donnees dynamiques dans les templates WordPress, selon le contexte.
Hook qui permet de modifier une valeur avant qu'elle soit utilisee. Le callback recoit la valeur, la transforme et la retourne modifiee.
Comme un filtre Instagram : la photo passe dedans et ressort transformee.
add_filter('the_content', function(string $content): string {
if (is_single()) {
$content .= '<div class="cta">Abonnez-vous!</div>';
}
return $content;
});Cas d'usage : Pour modifier dynamiquement les titres, contenus, requetes, URLs sans toucher aux templates.
Paradigme WordPress 5.9+ ou tout le site (header, footer, templates) est editable via des blocs Gutenberg. Remplace le Customizer classique.
Comme passer d'un papier peint fixe a un mur de LEGO : chaque element du site est deplacable et modifiable.
// theme.json active FSE
// templates/single.html
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:post-content /-->
<!-- wp:template-part {"slug":"footer"} /-->Cas d'usage : Pour les themes modernes permettant aux utilisateurs de personnaliser tout le layout sans code.
Unite de contenu de l'editeur Gutenberg. Chaque bloc est un composant React avec une interface d'edition et un rendu front. Base du Full Site Editing.
Comme des briques de construction modulaires : chacune a sa forme et sa fonction, on les assemble librement.
// block.json
{
"name": "myplugin/cta",
"title": "Call to Action",
"category": "design",
"editorScript": "file:./index.js",
"render": "file:./render.php"
}Cas d'usage : Pour creer des composants de contenu reutilisables avec une experience d'edition visuelle.
Systeme central de WordPress base sur le pattern Observer. Les hooks permettent aux plugins et themes de modifier le comportement sans toucher au core. Il en existe deux types : Actions et Filtres.
Comme des prises electriques dans une maison : tu branches ce que tu veux, ou tu veux, sans refaire l'installation.
// Action : executer du code a un moment
add_action('wp_footer', function() {
echo '<script>console.log("loaded")</script>';
});
// Filtre : modifier une valeur
add_filter('the_title', 'strtoupper');Cas d'usage : Mecanisme fondamental pour toute extension WordPress : plugins, themes, customisations.
Plugin charge automatiquement avant tous les autres, sans possibilite de desactivation via l'admin. Place dans wp-content/mu-plugins/.
Comme un systeme de securite integre dans les murs de la maison : on ne peut pas le debrancher.
// wp-content/mu-plugins/security.php
add_action('init', function() {
// Forcer HTTPS
if (!is_ssl()) {
wp_redirect('https://' . $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'], 301);
exit;
}
});Cas d'usage : Pour du code critique qui ne doit jamais etre desactive : securite, configuration, performance.
Token de securite WordPress (number used once) qui protege contre les CSRF et les acces non autorises. Valide 24h, lie a l'action et a l'utilisateur.
Comme un ticket d'entree a usage unique qui prouve que c'est bien toi qui as demande l'acces.
// Generation
$nonce = wp_create_nonce('delete_post_42');
// Verification
if (!wp_verify_nonce($_POST['_nonce'], 'delete_post_42')) {
wp_die('Securite : requete non autorisee');
}Cas d'usage : Sur tout formulaire et lien d'action dans l'admin et le front-end WordPress.
Cache en memoire persistant (Redis, Memcached) qui remplace le cache objet non-persistant par defaut. Accelere drastiquement les requetes repetees.
Comme une memoire vive ultra-rapide a cote d'un disque dur lent : les donnees frequentes y sont stockees.
// wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
// Usage dans le code
wp_cache_set('user_42', $userData, 'users', 3600);
$cached = wp_cache_get('user_42', 'users');Cas d'usage : Sur les sites a fort trafic pour reduire les requetes base de donnees de 60-80%.
Systeme de stockage cle-valeur dans la table wp_options. Sert pour les reglages du site, des plugins et des themes. Les options autoload=yes sont chargees a chaque requete.
Comme un fichier de configuration central ou chaque plugin note ses preferences.
// Stocker
update_option('mon_plugin_api_key', $key);
// Recuperer
$key = get_option('mon_plugin_api_key', 'default');
// Supprimer
delete_option('mon_plugin_api_key');Cas d'usage : Pour stocker les parametres de configuration du site, des plugins et des themes.
Ensemble de fonctions et conventions permettant de creer des extensions WordPress. Inclut l'activation, la desactivation, les hooks, les settings et les shortcodes.
Comme le kit de developpement d'une console de jeux : il fournit les outils pour creer des jeux compatibles.
/*
* Plugin Name: Mon Plugin
* Version: 1.0
*/
register_activation_hook(__FILE__, function() {
// Setup: tables, options, roles
});
add_action('init', 'mon_plugin_init');Cas d'usage : Pour etendre WordPress avec des fonctionnalites personnalisees de facon maintenable et upgradable.
Hook filter qui permet de modifier la requete principale de WordPress AVANT son execution. Le moyen le plus performant de personnaliser les listings.
Comme modifier la commande au restaurant avant qu'elle parte en cuisine, plutot que de renvoyer le plat.
add_action('pre_get_posts', function(WP_Query $query) {
if (!is_admin() && $query->is_main_query()) {
if ($query->is_home()) {
$query->set('posts_per_page', 6);
$query->set('post_type', ['post', 'tutorial']);
}
}
});Cas d'usage : Pour modifier le nombre de posts, le tri, les types affiches sur les pages d'archive et la home.
Plugin de debugging WordPress qui affiche les requetes SQL, hooks, erreurs PHP, requetes HTTP et temps d'execution en temps reel dans une barre admin.
Comme un tableau de bord medical qui affiche tous les signes vitaux du site en temps reel.
// Pas de code : c'est un plugin a installer
// Affiche dans la barre admin :
// - Nombre et temps des requetes SQL
// - Hooks executes et leur temps
// - Erreurs PHP et notices
// - Scripts/styles chargesCas d'usage : En developpement pour identifier les requetes lentes, les plugins gourmands et les hooks problematiques.
Famille de fonctions WordPress (sanitize_text_field, sanitize_email, sanitize_url) qui nettoient les donnees entrantes en supprimant les caracteres dangereux.
Comme un filtre a eau qui retire les impuretes avant de boire : on ne fait jamais confiance a l'eau brute.
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$url = sanitize_url($_POST['website']);
$html = wp_kses_post($_POST['content']);Cas d'usage : A chaque reception de donnees utilisateur dans WordPress : formulaires, AJAX, REST API.
Systeme de resolution de templates ou WordPress cherche le fichier le plus specifique d'abord (single-product.php) puis remonte vers le plus generique (index.php).
Comme un GPS qui cherche la route la plus precise d'abord, puis une route plus generale si la precise n'existe pas.
// Pour un post de type 'product' :
// 1. single-product.php
// 2. single.php
// 3. singular.php
// 4. index.phpCas d'usage : Pour comprendre quel fichier template sera utilise et ou placer ses customisations.
Boucle principale de WordPress qui itere sur les posts de la requete courante. Utilise have_posts() et the_post() pour afficher le contenu.
Comme un presentoir de magazines : on les feuillette un par un dans l'ordre prevu.
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<div><?php the_content(); ?></div>
<?php endwhile; ?>
<?php endif; ?>Cas d'usage : Dans tout template WordPress pour afficher les posts correspondant a la page courante.
Systeme de theming WordPress gerant template hierarchy, theme supports, customizer, menus, sidebars et widgets. Separe la presentation de la logique.
Comme les habits d'une personne : ils changent l'apparence sans changer la personnalite.
// functions.php
add_action('after_setup_theme', function() {
add_theme_support('post-thumbnails');
add_theme_support('title-tag');
register_nav_menus(['primary' => 'Menu Principal']);
});Cas d'usage : Pour creer des themes WordPress qui respectent les standards et sont compatibles avec l'ecosysteme.
Fichier de configuration central des themes blocs WordPress (5.8+). Definit les couleurs, typographies, espacements et styles globaux en JSON.
Comme un guide de style visuel numerique : il definit les regles de design pour tout le site.
{
"version": 3,
"settings": {
"color": {
"palette": [
{ "slug": "primary", "color": "#0073aa" }
]
},
"typography": { "fluid": true }
}
}Cas d'usage : Pour tout theme bloc moderne : centralise la configuration visuelle et genere le CSS automatiquement.
Systeme de cache temporaire natif stockant des donnees avec expiration. Utilise la table options par defaut, ou un object cache externe si disponible.
Comme un post-it avec une date de peremption : l'info est disponible rapidement mais disparait apres un temps.
$data = get_transient('api_data');
if ($data === false) {
$data = wp_remote_get('https://api.example.com/data');
set_transient('api_data', $data, HOUR_IN_SECONDS);
}Cas d'usage : Pour cacher les resultats d'appels API externes, de requetes couteuses ou de calculs lourds.
API RESTful native de WordPress exposant les contenus en JSON. Permet le headless WordPress, les SPA et l'integration avec des applications externes.
Comme un guichet de service qui fournit les informations dans un format standard que tout le monde peut lire.
register_rest_route('myplugin/v1', '/items', [
'methods' => 'GET',
'callback' => function(WP_REST_Request $req) {
return new WP_REST_Response($data, 200);
},
'permission_callback' => '__return_true',
]);Cas d'usage : Pour les architectures headless, les apps mobiles ou les integrations tierces avec WordPress.
Systeme de taches planifiees de WordPress, declenche par les visites des utilisateurs (pseudo-cron). Peut etre remplace par un vrai cron systeme pour plus de fiabilite.
Comme un reveil qui ne sonne que quand quelqu'un passe devant : il n'est pas fiable si personne ne vient.
// Planifier
if (!wp_next_scheduled('daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'daily_cleanup');
}
add_action('daily_cleanup', function() {
// Nettoyage quotidien
});Cas d'usage : Pour les taches recurrentes : nettoyage, envoi d'emails, synchronisation de donnees.
Methode standard pour charger CSS et JS dans WordPress. Gere les dependances, le versioning, le placement header/footer et evite les doublons.
Comme un chef d'orchestre qui decide quels musiciens jouent, dans quel ordre et a quel moment.
add_action('wp_enqueue_scripts', function() {
wp_enqueue_style('main', get_stylesheet_uri(), [], '1.0');
wp_enqueue_script(
'app', get_theme_file_uri('js/app.js'),
['jquery'], '1.0', true
);
});Cas d'usage : Pour tout chargement de CSS/JS dans un theme ou plugin WordPress.
Classe PHP pour construire des requetes de posts personnalisees. Permet de filtrer par type, taxonomie, meta, date, avec pagination et cache.
Comme un moteur de recherche interne ultra precis : tu definis tes criteres, il trouve les contenus.
$query = new WP_Query([
'post_type' => 'product',
'posts_per_page' => 12,
'tax_query' => [[
'taxonomy' => 'category',
'terms' => 'featured',
]],
]);
wp_reset_postdata();Cas d'usage : Pour afficher des listes de contenus personnalisees (produits vedettes, articles recents d'une categorie).
Interface en ligne de commande officielle de WordPress. Permet de gerer plugins, themes, base de donnees, utilisateurs et plus sans navigateur.
Comme un tableau de bord textuel pour piloter WordPress a la vitesse de la lumiere.
# Mise a jour
wp core update && wp plugin update --all
# Rechercher/remplacer
wp search-replace 'http://old.com' 'https://new.com'
# Export base
wp db export backup.sqlCas d'usage : Pour l'automatisation, les deploiements, la maintenance et les migrations WordPress.
Autres stacks