WordPress attribue un identifiant à presque tous les objets qu’il enregistre : articles, pages, médias, catégories, utilisateurs, commentaires, menus, produits ou commandes. Pour trouver rapidement cet ID, ouvrez généralement l’élément dans l’administration et inspectez son URL. Pour un développement fiable, utilisez ensuite l’API correspondant au type d’objet recherché.
Vous devez parfois renseigner un ID dans un shortcode, une extension, une règle d’exclusion ou un snippet PHP. Le besoin paraît simple. Pourtant, WordPress utilise plusieurs familles d’identifiants.
Un article et une page partagent le même système. Une catégorie utilise un autre espace. Un utilisateur peut donc porter l’ID 42, tandis qu’une page et un commentaire utilisent également 42.
Aucun conflit ne se produit. Ces objets vivent dans des tables et des API différentes.
Ce guide explique comment identifier le bon objet, puis récupérer son ID depuis l’administration, PHP, WP-CLI, l’API REST ou la base de données.
Comment trouver rapidement un ID dans WordPress ?
Dans la majorité des cas, la méthode la plus rapide consiste à ouvrir l’élément dans l’administration WordPress. Repérez ensuite le nombre présent dans l’URL.
https://example.com/wp-admin/post.php?post=486&action=editLangage du code : JavaScript (javascript)
Dans cet exemple, l’ID du contenu est 486.
Le nom du paramètre change selon l’objet recherché :
| Objet | Paramètre fréquent | Exemple |
|---|---|---|
| Article, page, CPT ou média | post | post=486 |
| Terme de taxonomie | tag_ID | tag_ID=37 |
| Utilisateur | user_id | user_id=12 |
| Commentaire | c | c=538 |
| Menu classique | menu | menu=14 |
Cette méthode répond au besoin immédiat. Cependant, elle ne suffit pas pour comprendre la nature de l’identifiant récupéré.
Qu’est-ce qu’un ID dans WordPress ?
Un ID WordPress est un identifiant interne qui permet de désigner précisément un enregistrement.
- Un article peut utiliser l’ID
1257. - Une catégorie peut utiliser le
term_id31. - Un utilisateur peut utiliser l’ID
4. - Un commentaire peut utiliser le
comment_ID982. - Un site multisite peut utiliser le
blog_id6.
Les articles, pages, médias et plusieurs objets techniques sont enregistrés comme des contenus WordPress. Les termes, commentaires et utilisateurs utilisent leurs propres systèmes.
Un ID n’est pas un slug
Le slug est la partie lisible d’une URL :
/recuperer-id-wordpress/
L’ID correspondant pourrait être :
4872
Vous pouvez modifier le slug sans changer l’ID. En revanche, une importation peut recréer le contenu avec un nouvel identifiant.
Une migration qui copie intégralement la base conserve normalement les IDs. Un export suivi d’une réimportation peut les réattribuer.
Un ID n’est pas forcément global
Les contenus enregistrés comme des posts partagent une même séquence d’identifiants. Cela concerne notamment :
- les articles ;
- les pages ;
- les custom post types ;
- les médias ;
- les révisions et sauvegardes automatiques ;
- les éléments de menus classiques ;
- les compositions synchronisées ;
- les modèles et parties de modèles de thèmes blocs ;
- les navigations de l’éditeur de site ;
- les produits, variations et coupons WooCommerce.
Ainsi, une page et un article ne peuvent pas posséder simultanément le même post ID sur un même site.
En revanche, une page, un utilisateur, un terme et un commentaire peuvent tous porter l’ID 25. Ils n’appartiennent pas au même espace de stockage.
Les principaux identifiants WordPress
| Objet | Identifiant courant | Nature de l’objet |
|---|---|---|
| Article | ID | Contenu de type post |
| Page | ID | Contenu de type page |
| Custom post type | ID | Contenu portant le slug du CPT |
| Média | ID | Contenu de type attachment |
| Révision | ID | Contenu de type revision |
| Sauvegarde automatique | ID | Révision associée à son contenu parent |
| Élément de menu classique | ID | Contenu de type nav_menu_item |
| Navigation de l’éditeur de site | ID | Contenu de type wp_navigation |
| Composition synchronisée | ID | Contenu de type wp_block |
| Modèle de thème bloc | ID | Contenu de type wp_template |
| Partie de modèle | ID | Contenu de type wp_template_part |
| Styles globaux | ID | Contenu de type wp_global_styles |
| Catégorie | term_id | Terme de la taxonomie category |
| Étiquette | term_id | Terme de la taxonomie post_tag |
| Taxonomie personnalisée | term_id | Terme de la taxonomie concernée |
| Menu classique | term_id | Terme de la taxonomie nav_menu |
| Utilisateur | ID | Objet WP_User |
| Commentaire | comment_ID | Objet WP_Comment |
| Avis produit WooCommerce | comment_ID | Commentaire associé au produit |
| Produit WooCommerce | ID | Objet WC_Product |
| Variation WooCommerce | ID | Objet WC_Product_Variation |
| Coupon WooCommerce | ID | Objet WC_Coupon |
| Commande WooCommerce | ID de commande | Objet WC_Order |
| Ligne de commande | order_item_id | Objet WC_Order_Item |
| Site multisite | blog_id | Site du réseau |
Commencer par inventorier les objets du site
Une installation WordPress peut enregistrer bien plus que des articles et des pages. Les thèmes et extensions ajoutent leurs propres types de contenus et taxonomies.
Avant d’écrire une requête, identifiez les objets réellement enregistrés sur le site.
Lister tous les post types avec WP-CLI
wp post-type list \
--fields=name,label,public,show_ui,show_in_rest \
--format=tableLangage du code : PHP (php)
Cette commande affiche les types natifs, les CPT du thème et ceux ajoutés par les extensions.
Lister toutes les taxonomies
wp taxonomy list \
--fields=name,label,object_type,public,show_ui,show_in_rest \
--format=tableLangage du code : PHP (php)
Vous pouvez ainsi découvrir des taxonomies comme product_cat, product_tag, pa_color, genre ou portfolio_category.
Lister les post types avec PHP
<?php
/**
* Retrieve all registered post types.
*
* @return array<string, WP_Post_Type>
*/
function sky_get_registered_post_types(): array {
return get_post_types(
array(),
'objects'
);
}Langage du code : HTML, XML (xml)
Cette approche évite de supposer qu’un objet inconnu est forcément une page ou un article.
Trouver un ID depuis l’administration WordPress
Trouver l’ID d’un article
Ouvrez Articles > Tous les articles, puis modifiez l’article concerné.
https://example.com/wp-admin/post.php?post=486&action=editLangage du code : JavaScript (javascript)
L’ID de l’article est 486.
Vous pouvez aussi survoler son titre dans la liste. Le navigateur affiche généralement l’URL cible dans sa barre d’état.
Trouver l’ID d’une page
Ouvrez Pages > Toutes les pages, puis modifiez la page.
https://example.com/wp-admin/post.php?post=731&action=editLangage du code : JavaScript (javascript)
L’ID de la page est 731.
La procédure reste identique, car les articles et les pages utilisent tous deux le système des contenus WordPress.
Trouver l’ID d’un custom post type
Un custom post type, ou CPT, fonctionne comme un article du point de vue de son identifiant.
Cela concerne, par exemple :
- un portfolio ;
- un témoignage ;
- un événement ;
- une recette ;
- une formation ;
- une annonce ;
- un bien immobilier ;
- une fiche d’annuaire.
https://example.com/wp-admin/post.php?post=1542&action=editLangage du code : JavaScript (javascript)
Le paramètre post=1542 indique l’ID du contenu.
Trouver l’ID d’une image ou d’un média
Les images, vidéos, documents PDF et fichiers audio sont des contenus de type attachment.
Depuis Médias > Bibliothèque, ouvrez le fichier concerné. Selon le mode d’affichage, l’adresse peut contenir :
post=924
ou :
item=924
L’ID du média est alors 924.
Un média possède plusieurs valeurs différentes :
- un ID d’attachement ;
- une URL publique ;
- un chemin physique ;
- des métadonnées ;
- éventuellement un contenu parent.
Ces valeurs ne sont pas interchangeables. L’ID de l’image mise en avant est également un ID d’attachement.
Trouver l’ID d’une catégorie
Ouvrez Articles > Catégories, puis modifiez la catégorie.
https://example.com/wp-admin/term.php?taxonomy=category&tag_ID=37&post_type=postLangage du code : JavaScript (javascript)
L’ID de la catégorie est 37.
Le nom du paramètre tag_ID prête à confusion. WordPress l’utilise également pour les catégories et plusieurs taxonomies personnalisées.
Trouver l’ID d’une étiquette
Ouvrez Articles > Étiquettes, puis modifiez l’étiquette.
https://example.com/wp-admin/term.php?taxonomy=post_tag&tag_ID=84&post_type=postLangage du code : JavaScript (javascript)
Son term_id est 84.
Trouver l’ID d’un terme de taxonomie personnalisée
La méthode reste identique pour une taxonomie personnalisée.
https://example.com/wp-admin/term.php?taxonomy=genre&tag_ID=21&post_type=filmLangage du code : JavaScript (javascript)
Dans cet exemple :
- la taxonomie s’appelle
genre; - le type de contenu s’appelle
film; - le terme possède l’ID
21.
Trouver l’ID d’un utilisateur
Ouvrez Utilisateurs > Tous les comptes, puis modifiez l’utilisateur.
https://example.com/wp-admin/user-edit.php?user_id=12Langage du code : JavaScript (javascript)
Son ID est 12.
Lorsque vous ouvrez votre propre profil, WordPress peut utiliser profile.php sans afficher votre ID. Revenez alors à la liste des utilisateurs, puis survolez votre compte.
Trouver l’ID d’un commentaire
Ouvrez Commentaires, puis modifiez le commentaire.
https://example.com/wp-admin/comment.php?action=editcomment&c=538Langage du code : JavaScript (javascript)
L’ID du commentaire est 538.
Les avis produits WooCommerce utilisent généralement le système des commentaires. Ils possèdent donc également un comment_ID.
Trouver l’ID d’un menu WordPress
Les menus classiques nécessitent une distinction importante.
Le menu lui-même est un terme de la taxonomie nav_menu. Chaque lien qu’il contient est toutefois un contenu de type nav_menu_item.
https://example.com/wp-admin/nav-menus.php?action=edit&menu=14Langage du code : JavaScript (javascript)
Le menu porte alors le term_id 14.
Un lien particulier de ce menu possède son propre post ID. Il ne faut pas confondre les deux.
Avec l’éditeur de site, les navigations peuvent aussi être enregistrées comme des contenus de type wp_navigation.
Retrouver un ID dans le code source de la page
Vous pouvez parfois retrouver l’ID sans accéder à l’administration.
Ouvrez le code source ou l’inspecteur du navigateur. Recherchez ensuite les classes de la balise <body>.
Sur un article :
<body class="single single-post postid-486">Langage du code : JavaScript (javascript)
Sur une page :
<body class="page page-id-731">Langage du code : JavaScript (javascript)
Sur un média :
<body class="attachment attachmentid-924">Langage du code : JavaScript (javascript)
Sur une archive de taxonomie :
<body class="tax-genre term-21">Langage du code : JavaScript (javascript)
Cette méthode dépend du thème et du contexte affiché. Le thème doit notamment appeler correctement la fonction body_class().
Récupérer un ID avec PHP
La bonne fonction dépend du contexte. Utiliser systématiquement get_the_ID() finit souvent par renvoyer le bon identifiant au mauvais moment.
Utiliser get_the_ID() dans la boucle WordPress
Dans la boucle principale ou une boucle personnalisée, utilisez :
<?php
$post_id = get_the_ID();
if ( false !== $post_id ) {
echo esc_html( (string) $post_id );
}Langage du code : HTML, XML (xml)
get_the_ID() renvoie l’ID du contenu courant dans la boucle.
Cette fonction convient notamment aux :
- articles ;
- pages ;
- CPT ;
- médias ;
- produits ;
- autres objets basés sur
WP_Post.
Utiliser get_queried_object_id() hors de la boucle
Lorsque vous travaillez sur l’objet principal demandé par WordPress, utilisez souvent :
<?php
$object_id = get_queried_object_id();Langage du code : HTML, XML (xml)
Cette fonction peut toutefois renvoyer différents types d’identifiants.
- Un post ID sur un contenu individuel.
- Un term ID sur une archive de taxonomie.
- Un user ID sur une archive d’auteur.
0lorsqu’aucun objet unique n’existe.
Vérifiez donc la nature de l’objet :
<?php
/**
* Retrieve the current queried object identifier and type.
*
* @return array{id: int, type: string}
*/
function sky_get_queried_object_data(): array {
$queried_object = get_queried_object();
if ( $queried_object instanceof WP_Post ) {
return array(
'id' => (int) $queried_object->ID,
'type' => $queried_object->post_type,
);
}
if ( $queried_object instanceof WP_Term ) {
return array(
'id' => (int) $queried_object->term_id,
'type' => $queried_object->taxonomy,
);
}
if ( $queried_object instanceof WP_User ) {
return array(
'id' => (int) $queried_object->ID,
'type' => 'user',
);
}
return array(
'id' => 0,
'type' => '',
);
}Langage du code : HTML, XML (xml)
Cette méthode évite de traiter un ID de catégorie comme un ID d’article.
Récupérer l’ID de la page d’accueil ou de la page des articles
Sur la page qui liste les derniers articles, get_the_ID() peut représenter l’article courant de la boucle. Il ne renvoie pas forcément l’ID de la page sélectionnée dans Réglages > Lecture.
Pour récupérer la page des articles :
<?php
$posts_page_id = (int) get_option( 'page_for_posts' );Langage du code : HTML, XML (xml)
Pour récupérer la page d’accueil statique :
<?php
$front_page_id = (int) get_option( 'page_on_front' );Langage du code : HTML, XML (xml)
Récupérer l’ID depuis un objet WP_Post
<?php
$post = get_post( 486 );
if ( $post instanceof WP_Post ) {
$post_id = (int) $post->ID;
}Langage du code : HTML, XML (xml)
Vous pouvez également confirmer le type du contenu :
<?php
$post_type = get_post_type( 486 );
if ( false !== $post_type ) {
echo esc_html( $post_type );
}Langage du code : HTML, XML (xml)
Récupérer un ID depuis une URL
WordPress fournit la fonction url_to_postid() :
<?php
$url = 'https://example.com/mon-article/';
$post_id = url_to_postid( $url );
if ( 0 !== $post_id ) {
echo esc_html( (string) $post_id );
}Langage du code : HTML, XML (xml)
La fonction tente d’identifier le contenu individuel correspondant à une URL du site courant. Elle renvoie 0 en cas d’échec.
Elle convient généralement aux :
- articles ;
- pages ;
- CPT publics ;
- pages d’attachement ;
- pages d’accueil statiques.
Elle peut échouer avec une URL externe, une archive, une route virtuelle, un endpoint WooCommerce ou une redirection complexe.
Récupérer un contenu depuis son slug ou son chemin
Malgré son nom, get_page_by_path() fonctionne aussi avec d’autres types de contenus.
<?php
$post = get_page_by_path(
'guides/wordpress',
OBJECT,
array( 'page', 'documentation' )
);
$post_id = $post instanceof WP_Post ? (int) $post->ID : 0;Langage du code : HTML, XML (xml)
Pour une page enfant, passez le chemin complet :
<?php
$page = get_page_by_path(
'services/developpement-wordpress',
OBJECT,
'page'
);Langage du code : HTML, XML (xml)
Rechercher efficacement un ID avec WP_Query
<?php
$query = new WP_Query(
array(
'post_type' => array( 'post', 'page', 'documentation' ),
'name' => 'mon-slug',
'post_status' => 'any',
'posts_per_page' => 1,
'fields' => 'ids',
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
)
);
$post_id = isset( $query->posts[0] )
? (int) $query->posts[0]
: 0;Langage du code : HTML, XML (xml)
L’argument fields => 'ids' évite de charger des objets complets lorsque seuls les identifiants vous intéressent.
Récupérer l’ID d’un média depuis son URL
Utilisez attachment_url_to_postid() :
<?php
$image_url = 'https://example.com/wp-content/uploads/2026/08/image.avif';
$attachment_id = attachment_url_to_postid( $image_url );
if ( 0 !== $attachment_id ) {
echo esc_html( (string) $attachment_id );
}Langage du code : HTML, XML (xml)
Utilisez de préférence l’URL du fichier original. Une URL intermédiaire comme image-768x432.avif peut ne pas correspondre au fichier enregistré par WordPress.
Récupérer l’ID de l’image mise en avant
<?php
$post_id = 486;
$featured_image_id = get_post_thumbnail_id( $post_id );
if ( 0 !== $featured_image_id ) {
echo esc_html( (string) $featured_image_id );
}Langage du code : HTML, XML (xml)
Le résultat correspond à l’ID d’attachement, pas à l’URL de l’image.
Pour obtenir ensuite son URL :
<?php
$image_url = wp_get_attachment_image_url(
$featured_image_id,
'full'
);Langage du code : HTML, XML (xml)
Récupérer l’ID d’un terme
Pour rechercher une catégorie par slug :
<?php
$term = get_term_by(
'slug',
'wordpress',
'category'
);
$term_id = $term instanceof WP_Term
? (int) $term->term_id
: 0;Langage du code : HTML, XML (xml)
Pour une catégorie de produits WooCommerce :
<?php
$product_category = get_term_by(
'slug',
'accessoires',
'product_cat'
);
$term_id = $product_category instanceof WP_Term
? (int) $product_category->term_id
: 0;Langage du code : HTML, XML (xml)
Indiquez toujours la taxonomie lorsque vous recherchez par nom ou par slug. Deux taxonomies peuvent employer la même valeur.
term_id ou term_taxonomy_id ?
Ces deux valeurs ne représentent pas exactement la même chose.
term_ididentifie le terme.term_taxonomy_ididentifie son association avec une taxonomie.
Dans la majorité des API WordPress, vous devez utiliser le term_id.
Récupérer l’ID d’un utilisateur avec PHP
Pour l’utilisateur connecté :
<?php
$user_id = get_current_user_id();Langage du code : HTML, XML (xml)
La fonction renvoie 0 lorsqu’aucun utilisateur n’est connecté.
Pour rechercher un utilisateur par adresse email :
<?php
$user = get_user_by(
'email',
'matt@example.com'
);
$user_id = $user instanceof WP_User
? (int) $user->ID
: 0;Langage du code : HTML, XML (xml)
Pour le rechercher par identifiant de connexion :
<?php
$user = get_user_by(
'login',
'matt'
);Langage du code : HTML, XML (xml)
Un ID utilisateur n’est pas un secret. Il ne doit jamais remplacer un contrôle de droits, un nonce ou une authentification.
Récupérer l’ID d’un commentaire avec PHP
Dans une boucle de commentaires :
<?php
$comment_id = (int) get_comment_ID();Langage du code : HTML, XML (xml)
À partir d’un objet :
<?php
$comment = get_comment( 538 );
$comment_id = $comment instanceof WP_Comment
? (int) $comment->comment_ID
: 0;Langage du code : HTML, XML (xml)
Récupérer les IDs d’un menu et de ses éléments
Pour récupérer le menu classique :
<?php
$menu = wp_get_nav_menu_object( 'Menu principal' );
$menu_id = $menu instanceof WP_Term
? (int) $menu->term_id
: 0;Langage du code : HTML, XML (xml)
Pour récupérer les IDs de ses éléments :
<?php
$menu_items = wp_get_nav_menu_items( $menu_id );
if ( is_array( $menu_items ) ) {
foreach ( $menu_items as $menu_item ) {
echo esc_html( (string) $menu_item->ID );
}
}Langage du code : HTML, XML (xml)
L’ID d’un élément de menu ne correspond pas nécessairement à l’ID de la page ciblée. L’élément possède son propre ID et référence ensuite sa destination.
Récupérer un ID avec WP-CLI
WP-CLI constitue souvent la méthode la plus rapide sur un serveur. Il évite les manipulations dans l’interface et permet de filtrer précisément les résultats.
Trouver une page par son slug
wp post list \
--post_type=page \
--name=contact \
--post_status=any \
--fields=ID,post_title,post_name,post_status \
--format=tableLangage du code : PHP (php)
Trouver les contenus d’un CPT
wp post list \
--post_type=portfolio \
--post_status=any \
--fields=ID,post_title,post_name,post_status \
--format=tableLangage du code : PHP (php)
Retourner uniquement l’ID
wp post list \
--post_type=page \
--name=contact \
--post_status=any \
--field=IDLangage du code : PHP (php)
Cette forme convient particulièrement aux scripts Bash.
Convertir une URL en ID
wp post url-to-id 'https://example.com/mon-article/'Langage du code : JavaScript (javascript)
Identifier la nature d’un post ID
wp post get 486 \
--fields=ID,post_type,post_status,post_title,post_name,post_parent \
--format=tableLangage du code : JavaScript (javascript)
Cette commande permet de déterminer si l’ID représente un article, une page, une révision, un média ou un objet technique.
Trouver une catégorie
wp term list category \
--slug=wordpress \
--fields=term_id,term_taxonomy_id,name,slug \
--format=tableLangage du code : PHP (php)
Trouver une catégorie de produits
wp term list product_cat \
--slug=accessoires \
--fields=term_id,name,slug,count \
--format=tableLangage du code : PHP (php)
Trouver une valeur d’attribut WooCommerce
wp term list pa_color \
--slug=bleu \
--fields=term_id,name,slug,count \
--format=tableLangage du code : PHP (php)
Le nom de la taxonomie d’un attribut global commence généralement par pa_.
Trouver un utilisateur
wp user get matt \
--fields=ID,user_login,user_email,roles \
--format=tableLangage du code : JavaScript (javascript)
Pour afficher tous les administrateurs :
wp user list \
--role=administrator \
--fields=ID,user_login,user_email,roles \
--format=tableLangage du code : PHP (php)
Trouver les commentaires d’un article
wp comment list \
--post_id=486 \
--fields=comment_ID,comment_author,comment_date,comment_approved \
--format=tableLangage du code : PHP (php)
Trouver un média par son nom de fichier
wp post list \
--post_type=attachment \
--post_status=inherit \
--search='mon-image' \
--fields=ID,post_title,guid \
--format=tableLangage du code : PHP (php)
Pour une recherche fiable par chemin enregistré, interrogez la métadonnée _wp_attached_file :
wp post list \
--post_type=attachment \
--post_status=inherit \
--meta_key=_wp_attached_file \
--meta_value='2026/08/mon-image.avif' \
--fields=ID,post_title \
--format=tableLangage du code : PHP (php)
Récupérer un ID avec l’API REST WordPress
L’API REST expose généralement l’identifiant dans le champ JSON id.
Trouver un article par slug
https://example.com/wp-json/wp/v2/posts?slug=mon-article&_fields=id,slug,linkLangage du code : JavaScript (javascript)
Réponse possible :
[
{
"id": 486,
"slug": "mon-article",
"link": "https://example.com/mon-article/"
}
]Langage du code : JSON / JSON avec commentaires (json)
Trouver une page
https://example.com/wp-json/wp/v2/pages?slug=contact&_fields=id,slug,linkLangage du code : JavaScript (javascript)
Trouver un média
https://example.com/wp-json/wp/v2/media?search=mon-image&_fields=id,slug,source_urlLangage du code : JavaScript (javascript)
Trouver une catégorie
https://example.com/wp-json/wp/v2/categories?slug=wordpress&_fields=id,name,slug,linkLangage du code : JavaScript (javascript)
Trouver un CPT
Le CPT doit être exposé dans l’API REST. Son endpoint dépend de sa configuration.
https://example.com/wp-json/wp/v2/portfolio?slug=projet-demo&_fields=id,slug,linkLangage du code : JavaScript (javascript)
Le rest_base peut différer du slug du post type.
Pour découvrir les types exposés :
https://example.com/wp-json/wp/v2/typesLangage du code : JavaScript (javascript)
Les contenus privés, brouillons et ressources protégées nécessitent généralement une authentification appropriée.
Trouver les IDs WooCommerce
WooCommerce ajoute plusieurs familles d’objets. Il faut distinguer produit, variation, attribut, commande, coupon et ligne de commande.
Récupérer l’ID d’un produit
Un produit WooCommerce est accessible avec l’API produit :
<?php
$product = wc_get_product( 823 );
if ( $product instanceof WC_Product ) {
$product_id = $product->get_id();
}Langage du code : HTML, XML (xml)
Dans l’administration, l’ID apparaît également dans l’URL d’édition et sous le titre du produit dans la liste.
Trouver un produit par SKU
Le SKU n’est pas l’ID du produit.
<?php
$product_id = wc_get_product_id_by_sku( 'SKU-123' );Langage du code : HTML, XML (xml)
La fonction peut renvoyer l’ID d’un produit simple, d’un produit variable ou d’une variation.
Avec WP-CLI :
wp eval 'printf( "%d\n", wc_get_product_id_by_sku( "SKU-123" ) );'Langage du code : JavaScript (javascript)
Récupérer l’ID d’une variation
<?php
$variation = wc_get_product( 912 );
if ( $variation instanceof WC_Product_Variation ) {
$variation_id = $variation->get_id();
$parent_id = $variation->get_parent_id();
}Langage du code : HTML, XML (xml)
Ne confondez pas :
- l’ID de la variation ;
- l’ID du produit variable parent ;
- le slug d’un attribut ;
- le
term_idd’une valeur d’attribut ; - le SKU de la variation.
Récupérer l’ID d’une commande WooCommerce
Chargez toujours une commande avec l’API WooCommerce :
<?php
$order = wc_get_order( 1054 );
if ( $order instanceof WC_Order ) {
$order_id = $order->get_id();
}Langage du code : HTML, XML (xml)
Les installations utilisant HPOS peuvent stocker les commandes dans des tables dédiées. Le code ne doit donc pas supposer qu’une commande existe dans la table des contenus WordPress.
Pour rechercher plusieurs commandes, utilisez wc_get_orders() ou WC_Order_Query.
<?php
$order_ids = wc_get_orders(
array(
'limit' => 10,
'orderby' => 'date',
'order' => 'DESC',
'return' => 'ids',
)
);Langage du code : HTML, XML (xml)
Numéro de commande et ID interne
Par défaut, le numéro affiché ressemble souvent à l’ID interne. Une extension de numérotation séquentielle peut toutefois afficher une autre valeur.
Numéro affiché : CMD-2026-00154
ID interne : 1054
Ne retirez pas simplement le préfixe du numéro affiché. Utilisez l’API WooCommerce ou celle de l’extension concernée.
Récupérer l’ID d’une ligne de commande
<?php
$order = wc_get_order( 1054 );
if ( $order instanceof WC_Order ) {
foreach ( $order->get_items() as $item ) {
$item_id = $item->get_id();
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
}
}Langage du code : HTML, XML (xml)
L’ID de l’élément n’est ni l’ID de la commande, ni l’ID du produit, ni celui de la variation.
Rechercher un ID directement en base de données
Privilégiez les API WordPress et WooCommerce. Une lecture SQL reste toutefois utile lors d’un audit, d’une migration ou d’un diagnostic.
Ne supposez jamais que le préfixe des tables est wp_.
db_prefix="$(wp db prefix)"Langage du code : JavaScript (javascript)
Rechercher un contenu par slug
db_prefix="$(wp db prefix)"
wp db query "
SELECT
ID,
post_type,
post_status,
post_title,
post_name
FROM ${db_prefix}posts
WHERE post_name = 'contact'
ORDER BY ID DESC;
"Langage du code : PHP (php)
Cette requête peut renvoyer plusieurs résultats. Un même slug peut exister dans différents types de contenus.
Ajoutez donc le type recherché :
db_prefix="$(wp db prefix)"
wp db query "
SELECT
ID,
post_title,
post_name
FROM ${db_prefix}posts
WHERE post_name = 'contact'
AND post_type = 'page'
ORDER BY ID DESC;
"Langage du code : PHP (php)
Rechercher un terme
db_prefix="$(wp db prefix)"
wp db query "
SELECT
t.term_id,
tt.term_taxonomy_id,
tt.taxonomy,
t.name,
t.slug
FROM ${db_prefix}terms AS t
INNER JOIN ${db_prefix}term_taxonomy AS tt
ON tt.term_id = t.term_id
WHERE t.slug = 'wordpress'
AND tt.taxonomy = 'category';
"Langage du code : PHP (php)
Cette jointure évite de confondre deux termes de taxonomies différentes.
Rechercher un utilisateur
db_prefix="$(wp db prefix)"
wp db query "
SELECT
ID,
user_login,
user_email,
display_name
FROM ${db_prefix}users
WHERE user_login = 'matt';
"Langage du code : PHP (php)
Rechercher un commentaire
db_prefix="$(wp db prefix)"
wp db query "
SELECT
comment_ID,
comment_post_ID,
comment_author,
comment_date,
comment_approved
FROM ${db_prefix}comments
WHERE comment_post_ID = 486
ORDER BY comment_ID DESC;
"Langage du code : PHP (php)
Évitez les écritures SQL directes. Les API WordPress gèrent les caches, les hooks et les relations que votre requête brute pourrait ignorer.
Pour les commandes WooCommerce, n’interrogez pas directement la table des contenus. Utilisez l’API WooCommerce afin de rester compatible avec HPOS.
Cas particulier du multisite WordPress
Dans un réseau multisite, chaque site possède son propre blog_id.
<?php
$site_id = get_current_blog_id();Langage du code : HTML, XML (xml)
Avec WP-CLI :
wp site list \
--fields=blog_id,url,public,archived,deleted \
--format=tableLangage du code : PHP (php)
Les IDs peuvent se répéter entre les sites
Le contenu 486 du site principal peut être différent du contenu 486 d’un sous-site.
Site 1, post 486
Site 7, post 486
Dans un contexte multisite, associez donc le post ID au blog_id.
Avec WP-CLI, ciblez explicitement le site :
wp post get 486 \
--url='https://sous-site.example.com' \
--fields=ID,post_type,post_titleLangage du code : JavaScript (javascript)
Tous les objets WordPress n’utilisent pas un ID numérique public
WordPress manipule aussi des objets identifiés principalement par un nom, une clé ou un slug.
| Objet | Identifiant à utiliser | Exemple |
|---|---|---|
| Option WordPress | Nom de l’option | page_on_front |
| Transient | Nom du transient | sky_api_cache |
| Post meta | Post ID et clé | 486 et _thumbnail_id |
| User meta | User ID et clé | 12 et billing_phone |
| Term meta | Term ID et clé | 37 et image_id |
| Comment meta | Comment ID et clé | 538 et rating |
| Type de contenu | Slug du post type | product |
| Taxonomie | Slug de la taxonomie | product_cat |
| Rôle utilisateur | Slug du rôle | shop_manager |
| Capability | Nom de la capacité | edit_products |
| Bloc Gutenberg | Nom du bloc | core/image |
| Attribut de bloc | Nom de l’attribut | mediaId |
La table des options possède bien une colonne interne option_id. Cependant, les API WordPress utilisent le nom de l’option. Ne construisez pas votre logique autour de cet identifiant interne.
Le clientId d’un bloc Gutenberg n’est pas un post ID
L’éditeur attribue un clientId aux blocs présents dans la session d’édition. Cet identifiant permet de manipuler l’instance du bloc dans l’interface.
Il ne représente pas forcément un enregistrement persistant en base de données. Un bloc Image peut, en revanche, contenir l’ID persistant du média dans son attribut id.
<!-- wp:image {"id":924,"sizeSlug":"large"} -->Langage du code : HTML, XML (xml)
Ici, 924 correspond à l’ID de l’attachement. Il ne s’agit pas de l’ID du bloc lui-même.
Afficher automatiquement les IDs dans l’administration
Vous pouvez ajouter une colonne ID aux listes des contenus et taxonomies. Placez ce snippet dans une extension personnalisée, un mu-plugin ou un gestionnaire de snippets.
Ne modifiez jamais les fichiers du cœur de WordPress.
<?php
/**
* Display object IDs in WordPress admin list tables.
*
* @package SkyMinds
*/
declare(strict_types=1);
defined( 'ABSPATH' ) || exit;
/**
* Register ID columns for visible post types and taxonomies.
*
* @return void
*/
function sky_register_admin_id_columns(): void {
$post_types = get_post_types(
array(
'show_ui' => true,
),
'names'
);
foreach ( $post_types as $post_type ) {
add_filter(
"manage_{$post_type}_posts_columns",
'sky_add_post_id_column'
);
add_action(
"manage_{$post_type}_posts_custom_column",
'sky_render_post_id_column',
10,
2
);
}
$taxonomies = get_taxonomies(
array(
'show_ui' => true,
),
'names'
);
foreach ( $taxonomies as $taxonomy ) {
add_filter(
"manage_edit-{$taxonomy}_columns",
'sky_add_term_id_column'
);
add_filter(
"manage_{$taxonomy}_custom_column",
'sky_render_term_id_column',
10,
3
);
}
}
add_action( 'admin_init', 'sky_register_admin_id_columns' );
/**
* Add an ID column to a post list table.
*
* @param array<string, string> $columns Existing columns.
* @return array<string, string>
*/
function sky_add_post_id_column( array $columns ): array {
$columns['sky_object_id'] = esc_html__( 'ID', 'sky' );
return $columns;
}
/**
* Render an ID in a post list table.
*
* @param string $column_name Current column name.
* @param int $post_id Current post ID.
* @return void
*/
function sky_render_post_id_column(
string $column_name,
int $post_id
): void {
if ( 'sky_object_id' !== $column_name ) {
return;
}
echo esc_html( (string) $post_id );
}
/**
* Add an ID column to a term list table.
*
* @param array<string, string> $columns Existing columns.
* @return array<string, string>
*/
function sky_add_term_id_column( array $columns ): array {
$columns['sky_object_id'] = esc_html__( 'ID', 'sky' );
return $columns;
}
/**
* Render an ID in a term list table.
*
* @param string $content Existing column content.
* @param string $column_name Current column name.
* @param int $term_id Current term ID.
* @return string
*/
function sky_render_term_id_column(
string $content,
string $column_name,
int $term_id
): string {
if ( 'sky_object_id' !== $column_name ) {
return $content;
}
return esc_html( (string) $term_id );
}Langage du code : HTML, XML (xml)
Le snippet détecte les post types et taxonomies qui disposent d’une interface. Il couvre donc les articles, pages, médias, CPT et taxonomies ajoutées par les extensions.
Les erreurs les plus fréquentes
Confondre l’ID avec le slug
Cette comparaison est incorrecte :
<?php
if ( 486 === 'mon-article' ) {
// Ces valeurs ne représentent pas la même chose.
}Langage du code : HTML, XML (xml)
Utilisez l’ID pour cibler un enregistrement précis. Utilisez le slug pour une recherche lisible ou une configuration transportable.
Confondre term_id et term_taxonomy_id
La plupart des fonctions WordPress attendent un term_id. Ne copiez pas aveuglément le term_taxonomy_id affiché par une requête SQL.
Confondre produit, variation et SKU
Un produit variable peut posséder :
- un ID parent ;
- plusieurs IDs de variations ;
- un SKU parent ;
- plusieurs SKU de variations ;
- des IDs de termes d’attributs.
Demander « l’ID du produit » ne suffit donc pas toujours.
Confondre numéro de commande et ID interne
Une extension peut transformer le numéro affiché sans modifier l’ID interne. Passez l’ID interne à wc_get_order().
Utiliser get_the_ID() au mauvais endroit
get_the_ID() dépend du contenu courant. Une boucle secondaire peut modifier temporairement le $post global.
<?php
$query = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => 3,
)
);
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
$post_id = get_the_ID();
}
}
wp_reset_postdata();Langage du code : HTML, XML (xml)
Sans wp_reset_postdata(), le reste de la page peut utiliser l’ID du dernier article de la boucle secondaire.
Supposer que les IDs sont identiques entre production et préproduction
Une copie complète de base conserve normalement les IDs. Cependant, les environnements peuvent diverger après des imports, créations distinctes, suppressions ou synchronisations partielles.
Évitez donc de disperser des IDs codés en dur dans plusieurs fichiers.
Lorsque la valeur doit rester configurable, enregistrez-la dans une option, un réglage ou un champ d’administration.
Utiliser un ID comme mécanisme de sécurité
Connaître l’ID d’un article, d’un utilisateur ou d’une commande ne prouve aucun droit d’accès.
Vérifiez toujours :
- les capacités avec
current_user_can(); - les nonces lors d’une action ;
- l’authentification ;
- la propriété réelle de l’objet ;
- les permissions de l’API REST.
Un ID identifie. Il n’autorise rien.
Pourquoi les IDs WordPress comportent-ils des trous ?
La table des contenus stocke bien plus que les articles publiés. Chaque création peut consommer un identifiant.
- Brouillon.
- Révision.
- Sauvegarde automatique.
- Média.
- Page.
- Élément de menu.
- Produit.
- CPT.
- Contenu supprimé.
Il est donc normal de passer de l’ID 486 à 493. WordPress a simplement enregistré d’autres objets entre les deux.
Faut-il utiliser l’ID ou le slug dans un développement ?
Le meilleur choix dépend du besoin.
Utiliser un ID
- L’objet est déjà connu.
- Vous manipulez une relation interne.
- Vous recevez l’ID depuis une API WordPress.
- Vous stockez une sélection effectuée par un administrateur.
- Vous devez éviter une recherche répétée.
Utiliser un slug
- La configuration doit fonctionner sur plusieurs environnements.
- L’objet doit rester repérable par un humain.
- Vous recherchez un contenu avant de mémoriser son ID.
- Vous déployez le même code sur plusieurs installations.
Une stratégie efficace consiste à résoudre le slug une fois, puis à utiliser l’ID obtenu pendant le reste du traitement.
Questions fréquentes
Où trouver rapidement l’ID d’une page WordPress ?
Ouvrez la page dans l’administration. Repérez ensuite le nombre placé après post= dans l’URL. Dans post.php?post=731&action=edit, l’ID de la page est 731.
L’ID change-t-il lorsque je modifie le titre ou le permalien ?
Non. Modifier le titre, le slug ou le permalien ne change pas l’ID interne. Une exportation suivie d’une réimportation peut toutefois créer un nouvel enregistrement.
Deux objets WordPress peuvent-ils avoir le même ID ?
Oui, lorsqu’ils appartiennent à des systèmes différents. Une page, un utilisateur et un commentaire peuvent tous utiliser l’ID 25. Deux contenus enregistrés comme des posts ne peuvent pas partager le même ID sur le même site.
Pourquoi get_the_ID() ne renvoie-t-il pas la bonne page ?
La fonction renvoie le contenu courant de la boucle. Sur une archive ou après une requête secondaire, ce contenu peut différer de l’objet principal demandé. Utilisez get_queried_object_id() ou restaurez la boucle avec wp_reset_postdata().
Comment récupérer l’ID d’une page depuis son URL ?
Utilisez url_to_postid() pour une URL individuelle appartenant au site courant. La fonction renvoie l’ID trouvé ou 0 en cas d’échec.
Comment récupérer l’ID d’une image depuis son URL ?
Utilisez attachment_url_to_postid() avec l’URL du fichier original. Une URL correspondant à une taille intermédiaire peut ne pas être reconnue.
L’ID d’un produit WooCommerce correspond-il à son SKU ?
Non. L’ID est l’identifiant interne du produit. Le SKU est une référence commerciale configurable. Utilisez wc_get_product_id_by_sku() pour retrouver un ID depuis un SKU.
Les commandes WooCommerce sont-elles encore des posts ?
Pas nécessairement. Avec HPOS, WooCommerce peut stocker les commandes dans des tables dédiées. Utilisez wc_get_order(), wc_get_orders() et les objets WooCommerce.
En résumé
La méthode la plus rapide consiste à ouvrir l’objet dans l’administration, puis à lire son ID dans l’URL.
Pour du code maintenable, choisissez ensuite l’API adaptée :
get_the_ID()pour le contenu courant de la boucle ;get_queried_object_id()pour l’objet principal demandé ;url_to_postid()pour un contenu individuel retrouvé depuis son URL ;attachment_url_to_postid()pour un média ;get_page_by_path()pour un contenu retrouvé par son chemin ;get_term_by()pour un terme ;get_current_user_id()ouget_user_by()pour un utilisateur ;get_comment_ID()pour un commentaire ;wc_get_product()etwc_get_order()pour WooCommerce ;- WP-CLI pour les recherches rapides sur serveur.
Surtout, ne demandez pas seulement « quel est l’ID ? ».
Demandez d’abord : l’ID de quel type d’objet ?
Expertise WordPress
Besoin d’identifier, migrer ou manipuler des données WordPress ?
Une confusion entre post ID, term ID, variation ID ou order ID peut produire des requêtes incorrectes et des relations cassées. Confiez votre développement, votre migration ou votre audit à un expert WordPress et WooCommerce.
Développement sur mesure · WP-CLI · WooCommerce · Migrations de données
Sources officielles
- WordPress : fonction
get_the_ID() - WordPress : fonction
get_queried_object_id() - WordPress : fonction
url_to_postid() - WordPress : fonction
attachment_url_to_postid() - Documentation des commandes WP-CLI pour les contenus
- WP-CLI : lister les post types enregistrés
- Référence de l’API REST WordPress
- WooCommerce :
wc_get_orders()et les requêtes de commandes - WooCommerce : High-Performance Order Storage




Bonjour! Merci pour cet article.
Cependant, sais-tu comment récupérer l’ID d’une catégorie en dehors de la Boucle, avec $wp_query? (et aussi l’ID des pages, tant qu’on y est :-D)
Je cherche une solution depuis des jours sans succès… D’avance merci pour ton aide!
Salut kReEsTaL,
Voici comment récupérer l’ID d’une catégorie :
Le problème avec ce premier bout de code est que l’on récupère uniquement l’ID de la première catégorie d’un post.
Si l’article est classé dans plusieurs catégories, il faut créer une boucle :
A titre indicatif, voici les autres variables concernant les catégories :
Les pages sont considérées comme des posts : la méthode fonctionne pour les deux.
Super, merci beaucoup pour ton aide!! :) Je vais essayer ça.
@kReEsTaL : je t’en prie ! :)
Ah enfin j’essaye de supprimer les pubs qui sont dans une de mes catégories et je ne pouvais pas récupérer son id
merci beaucoup pour ce code
Merci pour le code ça fait un bout que je chercher.
Merci