Récupérer l’ID d’un article, d’une page ou de n’importe quel objet WordPress

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.

Kinsta: Premium Managed WordPress hosting

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é :

ObjetParamètre fréquentExemple
Article, page, CPT ou médiapostpost=486
Terme de taxonomietag_IDtag_ID=37
Utilisateuruser_iduser_id=12
Commentairecc=538
Menu classiquemenumenu=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_id 31.
  • Un utilisateur peut utiliser l’ID 4.
  • Un commentaire peut utiliser le comment_ID 982.
  • Un site multisite peut utiliser le blog_id 6.

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.

WPEngine: Premium Managed WooCommerce hosting

Les principaux identifiants WordPress

ObjetIdentifiant courantNature de l’objet
ArticleIDContenu de type post
PageIDContenu de type page
Custom post typeIDContenu portant le slug du CPT
MédiaIDContenu de type attachment
RévisionIDContenu de type revision
Sauvegarde automatiqueIDRévision associée à son contenu parent
Élément de menu classiqueIDContenu de type nav_menu_item
Navigation de l’éditeur de siteIDContenu de type wp_navigation
Composition synchroniséeIDContenu de type wp_block
Modèle de thème blocIDContenu de type wp_template
Partie de modèleIDContenu de type wp_template_part
Styles globauxIDContenu de type wp_global_styles
Catégorieterm_idTerme de la taxonomie category
Étiquetteterm_idTerme de la taxonomie post_tag
Taxonomie personnaliséeterm_idTerme de la taxonomie concernée
Menu classiqueterm_idTerme de la taxonomie nav_menu
UtilisateurIDObjet WP_User
Commentairecomment_IDObjet WP_Comment
Avis produit WooCommercecomment_IDCommentaire associé au produit
Produit WooCommerceIDObjet WC_Product
Variation WooCommerceIDObjet WC_Product_Variation
Coupon WooCommerceIDObjet WC_Coupon
Commande WooCommerceID de commandeObjet WC_Order
Ligne de commandeorder_item_idObjet WC_Order_Item
Site multisiteblog_idSite 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.

Kinsta: Premium Managed WordPress hosting

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().

Kinsta: Premium Managed WordPress hosting

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.
  • 0 lorsqu’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_id identifie le terme.
  • term_taxonomy_id identifie 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_id d’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.

ObjetIdentifiant à utiliserExemple
Option WordPressNom de l’optionpage_on_front
TransientNom du transientsky_api_cache
Post metaPost ID et clé486 et _thumbnail_id
User metaUser ID et clé12 et billing_phone
Term metaTerm ID et clé37 et image_id
Comment metaComment ID et clé538 et rating
Type de contenuSlug du post typeproduct
TaxonomieSlug de la taxonomieproduct_cat
Rôle utilisateurSlug du rôleshop_manager
CapabilityNom de la capacitéedit_products
Bloc GutenbergNom du bloccore/image
Attribut de blocNom de l’attributmediaId

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() ou get_user_by() pour un utilisateur ;
  • get_comment_ID() pour un commentaire ;
  • wc_get_product() et wc_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

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

6 réflexions au sujet de “Récupérer l’ID d’un article, d’une page ou de n’importe quel objet WordPress”

  1. 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!

    Répondre
  2. Salut kReEsTaL,

    Voici comment récupérer l’ID d’une catégorie :

    
    /* Pour récupérer l'ID de la catégorie d'un post ; */
    $category = get_the_category(); 
    echo $category[0]->cat_ID;

    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 :

    /* Pour récupérer toutes les ID de catégories d'un post ; */
    foreach((get_the_category()) as $category) { 
        echo $category->cat_ID; 
    } 

    A titre indicatif, voici les autres variables concernant les catégories :

    cat_ID : ID de catégorie.
    cat_name : nom de la catégorie.
    category_nicename : le slug automatique généré pour la catégorie.
    category_description : la description de la catégorie
    category_parent : l’ID de la catégorie parente. Sera égal à 0 s’il n’y en a pas.
    category_count : le nombre d’occurences de cette catégorie.

    Les pages sont considérées comme des posts : la méthode fonctionne pour les deux.

    Répondre
  3. 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

    Répondre

Laisser un commentaire