15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
23.10.2024

ID de publicación de WordPress: La guía de referencia completa para desarrolladores

Un WordPress Post ID es un entero único de incremento automático almacenado en la tabla de base de datos wp_posts que identifica permanentemente cada pieza de contenido en una instalación de WordPress — incluyendo publicaciones, páginas, tipos de publicaciones personalizadas, archivos adjuntos, revisiones y elementos del menú de navegación. Es la clave primaria que WordPress utiliza internamente para referenciar contenido en su base de datos, ecosistema de plugins y jerarquía de plantillas.

A diferencia de los slugs o títulos, un Post ID nunca cambia después de su asignación, lo que lo convierte en el punto de referencia más confiable para la manipulación programática de contenido, consultas personalizadas e integraciones de terceros.

Por qué los Post IDs importan más allá de la gestión básica de contenido

La mayoría de la documentación trata los Post IDs como una conveniencia de búsqueda. En la práctica, son la columna vertebral de todo el modelo de datos relacional de WordPress. Cada comentario, entrada de postmeta, relación de términos y archivo adjunto está vinculado a un Post ID mediante referencias de clave foránea en el esquema de la base de datos. Comprender esto tiene implicaciones directas para el rendimiento, la integridad de los datos y la arquitectura de plugins.

Hechos arquitectónicos críticos que los desarrolladores suelen pasar por alto:

  • Los Post IDs son globalmente únicos por instalación, no por tipo de publicación. Una página con ID 42 y una entrada de tipo de publicación personalizada no pueden compartir ese entero.
  • Los IDs se asignan desde una secuencia de incremento automático en MySQL/MariaDB. Las publicaciones eliminadas dejan huecos permanentes — el ID 45 puede no existir nunca si la publicación 45 fue enviada a la papelera y purgada.
  • Las revisiones de WordPress consumen Post IDs. Una publicación editada 20 veces generará 20 filas de revisión en wp_posts, cada una con su propio ID. En sitios editoriales de alto tráfico, esto infla significativamente el contador de incremento automático.
  • Los archivos adjuntos (elementos de la biblioteca multimedia) se almacenan como publicaciones con post_type = 'attachment'. Sus Post IDs se utilizan en wp_postmeta para almacenar _wp_attachment_metadata, haciendo que las consultas de medios dependan del ID.
  • En WordPress Multisite, los Post IDs se reinician por subsitio porque cada sitio obtiene su propio conjunto de tablas con prefijo (p. ej., wp_2_posts). Nunca asumas la unicidad del ID en toda una red.

Cómo encontrar un Post ID: todos los métodos explicados

Método 1: La técnica de inspección de URL en el administrador

Este es el método más rápido y no requiere plugins ni acceso a la base de datos.

  1. Navega a Entradas > Todas las entradas (o Páginas > Todas las páginas, o cualquier lista de tipo de publicación personalizada).
  2. Pasa el cursor sobre el título de la publicación — no hagas clic.
  3. Observa la URL que se muestra en la barra de estado de tu navegador. Sigue este patrón:
https://yoursite.com/wp-admin/post.php?post=123&action=edit

El entero después de post= es el Post ID. Hacer clic en Editar y examinar la barra de direcciones del navegador produce el mismo resultado.

Caso especial: Si tu estructura de enlaces permanentes utiliza una base personalizada y la publicación está en estado borrador, la URL en la barra de estado puede diferir de la URL publicada. Utiliza siempre el parámetro post= en la URL del administrador, no el slug del front-end.

Método 2: El truco de la columna de edición rápida (sin plugin requerido)

  1. Ve a Entradas > Todas las entradas.
  2. Haz clic en Edición rápida bajo cualquier título de publicación.
  3. El Post ID no aparece en la Edición rápida en sí, pero el HTML circundante contiene un atributo data-id en la fila de la tabla. Haz clic derecho en la fila e inspecciona el elemento — verás <tr id="post-123"> donde 123 es el Post ID.

Esto es útil cuando necesitas el ID sin instalar nada y la URL de la barra de estado está oculta.

Método 3: Usar la función get_the_ID() en plantillas

Dentro del Loop de WordPress, recupera el ID de la publicación actual de forma programática:

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        $current_post_id = get_the_ID();
        echo 'Post ID: ' . esc_html( $current_post_id );
    endwhile;
endif;
?>

Fuera del Loop, pasa un objeto de publicación explícitamente:

<?php
$post_object = get_post( get_queried_object_id() );
$post_id     = $post_object->ID;
?>

Método 4: Consulta directa a la base de datos mediante phpMyAdmin o CLI

Para búsquedas masivas o automatización a nivel de servidor, consulta la tabla wp_posts directamente. En un entorno de VPS Hosting con acceso root, puedes usar el CLI de MySQL:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT ID, post_title, post_type, post_status 
   FROM wp_posts 
   WHERE post_status = 'publish' 
   ORDER BY ID ASC;"

Para encontrar el ID de una publicación específica por su slug:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT ID, post_title FROM wp_posts 
   WHERE post_name = 'your-post-slug' 
   AND post_type = 'post';"

Advertencia: La tabla wp_posts almacena revisiones, borradores automáticos y elementos del menú de navegación junto con el contenido publicado. Filtra siempre por post_status y post_type para evitar devolver registros internos de WordPress que comparten la misma tabla.

Método 5: WP-CLI para búsquedas con scripts

En cualquier servidor con WP-CLI instalado — práctica estándar en entornos de VPS con cPanel o entornos bare-metal correctamente configurados — usa:

wp post list --post_type=post --fields=ID,post_title,post_status --format=table

Para recuperar el ID de una publicación específica por título:

wp post list --post_type=any --search="Exact Post Title" --fields=ID,post_title

WP-CLI es significativamente más rápido que phpMyAdmin para operaciones masivas y es scriptable para pipelines de automatización.

Método 6: Plugins de administración para usuarios no técnicos

El plugin Show IDs by 99robots añade una columna “ID” a todas las tablas de lista en el administrador de WordPress (Entradas, Páginas, Medios, Usuarios, Taxonomías). No requiere configuración y añade una sobrecarga insignificante. Para equipos donde los editores necesitan Post IDs sin acceso a la base de datos, esta es la solución adecuada.

Casos de uso prácticos: Post IDs en el desarrollo real de WordPress

Excluir publicaciones de las consultas

Uno de los casos de uso más comunes es excluir publicaciones específicas de las consultas de archivo o loop usando post__not_in:

<?php
$args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'posts_per_page' => 10,
    'post__not_in'   => array( 123, 456, 789 ), // Exclude by Post ID
);

$custom_query = new WP_Query( $args );

if ( $custom_query->have_posts() ) :
    while ( $custom_query->have_posts() ) : $custom_query->the_post();
        the_title( '<h2>', '</h2>' );
    endwhile;
    wp_reset_postdata();
endif;
?>

Nota de rendimiento: post__not_in se traduce en una cláusula SQL NOT IN (...). En tablas con cientos de miles de filas, esto puede causar escaneos completos de tabla si la columna ID no está correctamente indexada. En una instalación estándar de WordPress, ID es la clave primaria y siempre está indexada — pero verifica esto en bases de datos migradas o heredadas.

Recuperar una publicación específica por ID

<?php
$post_data = get_post( 123 );

if ( ! is_null( $post_data ) ) {
    echo esc_html( $post_data->post_title );
    echo wp_kses_post( $post_data->post_content );
}
?>

get_post() devuelve un objeto WP_Post o null si el ID no existe. Siempre verifica si es nulo antes de acceder a las propiedades para evitar errores fatales en producción.

Obtener metadatos de publicación por ID

<?php
$meta_value = get_post_meta( 123, '_custom_field_key', true );
echo esc_html( $meta_value );
?>

El tercer parámetro true devuelve un único valor como cadena. Pasar false devuelve un array de todos los valores para esa clave — distinción crítica cuando se trabaja con entradas meta serializadas o repetidas.

Generar un enlace permanente a partir de un Post ID

<?php
$url = get_permalink( 123 );
echo esc_url( $url );
?>

Esto respeta tu estructura de enlaces permanentes y es el método correcto para generar URLs del front-end a partir de Post IDs. Nunca concatenes manualmente la URL del sitio con un slug — las estructuras de enlaces permanentes varían y este enfoque es frágil.

Usar Post IDs en shortcodes

Muchos shortcodes de constructores de páginas y plugins aceptan un parámetro de Post ID para incrustar o referenciar contenido:

[display_post id="123"]

Error: Contact form not found.

El ejemplo de Contact Form 7 es particularmente relevante — su atributo id es el Post ID de la entrada del tipo de publicación personalizada del formulario, no un número secuencial arbitrario. Codificar esto en plantillas requiere conocer el ID exacto, razón por la cual las migraciones de staging a producción que usan búsqueda y reemplazo en la base de datos pueden romper las referencias de shortcodes si los IDs cambian.

Lógica condicional basada en Post ID

<?php
if ( is_single( 123 ) ) {
    // Load special sidebar only on this post
    get_sidebar( 'special' );
} elseif ( is_page( array( 45, 67 ) ) ) {
    // Apply custom template logic to these pages
    get_template_part( 'template-parts/custom-layout' );
}
?>

is_single(), is_page() y is_singular() aceptan Post IDs, slugs o títulos como argumentos. Usar IDs es el enfoque más confiable — los slugs pueden ser cambiados por los editores, los títulos no son únicos.

Comportamiento del Post ID en escenarios avanzados

Redes Multisite

En una instalación de WordPress Multisite, cada subsitio mantiene su propia tabla wp_{blog_id}_posts. El Post ID 123 en el sitio 1 (wp_posts) es completamente independiente del Post ID 123 en el sitio 2 (wp_2_posts). Las consultas entre sitios requieren cambiar el contexto del blog:

<?php
switch_to_blog( 2 );
$post_data = get_post( 123 ); // Retrieves post 123 from site 2
restore_current_blog();
?>

No restaurar el contexto del blog después de switch_to_blog() es una fuente común de errores sutiles y difíciles de depurar en plugins multisite.

Huecos en Post IDs y comportamiento del incremento automático

Cuando las publicaciones se eliminan permanentemente (no solo enviadas a la papelera), sus IDs quedan retirados. El contador AUTO_INCREMENT de MySQL no restablece ni reutiliza estos valores. En sitios con flujos de trabajo editoriales intensivos — creación y eliminación frecuente de borradores — el contador de Post ID puede alcanzar valores inesperadamente altos. Este es un comportamiento normal y no tiene impacto funcional, pero puede sorprender a los desarrolladores que esperan IDs secuenciales.

Para verificar el valor actual de incremento automático en tu base de datos:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT AUTO_INCREMENT FROM information_schema.TABLES 
   WHERE TABLE_SCHEMA = 'wordpress_db' 
   AND TABLE_NAME = 'wp_posts';"

REST API y Post IDs

La REST API de WordPress expone los Post IDs en cada objeto de respuesta. Una solicitud GET a /wp-json/wp/v2/posts/123 recupera la publicación con ID 123. Esto convierte a los Post IDs en la referencia canónica para arquitecturas de WordPress headless, donde el front-end se comunica con el backend exclusivamente mediante REST o GraphQL.

curl -s https://yoursite.com/wp-json/wp/v2/posts/123 | python3 -m json.tool

La respuesta incluye el campo id, link, slug y todos los datos de la publicación — confirmando que la REST API está diseñada con el ID como elemento principal.

Post ID vs. otros identificadores de WordPress

Entender cuándo usar un Post ID frente a identificadores alternativos previene errores arquitectónicos.

IdentificadorUnicidadMutableCaso de uso
Post IDGlobalmente único por sitioNuncaReferencias programáticas, consultas de base de datos, llamadas a API
Post Slug (post_name)Único por tipo de publicaciónSí (los editores pueden cambiarlo)URLs amigables para SEO, referencias legibles por humanos
Título de la publicaciónNo únicoSolo para visualización, nunca para lógica
GUIDGlobalmente únicoSe establece al crear, raramente cambiaFeeds RSS, seguimiento interno de WordPress
Valor de campo personalizadoDepende de la implementaciónBúsquedas específicas de la aplicación

Conclusión clave de esta tabla: Usa Post IDs en todo el código. Usa slugs solo en contenido que los humanos leen o escriben. Nunca uses títulos como identificadores en la lógica.

Consideraciones de rendimiento para consultas de Post ID

En instalaciones de WordPress de alto tráfico que se ejecutan en Servidores Dedicados o infraestructura VPS optimizada, el rendimiento de las consultas de Post ID raramente es un cuello de botella porque ID es la clave primaria de wp_posts. Sin embargo, varios patrones pueden degradar el rendimiento:

post__not_in con arrays grandes: Pasar cientos de IDs a post__not_in genera una cláusula NOT IN (...) grande. Considera almacenar en caché el conjunto de resultados o reestructurar la consulta usando exclusiones de taxonomía en su lugar.

get_post() dentro de loops sin caché: Llamar a get_post() repetidamente en un loop sin aprovechar la caché de objetos genera accesos redundantes a la base de datos. La caché de objetos interna de WordPress (wp_cache_get) maneja esto automáticamente cuando la caché de objetos persistente (Redis, Memcached) está configurada — pero solo durante la duración de una única solicitud sin un backend de caché persistente.

Acumulación de revisiones: Como se señaló anteriormente, las revisiones consumen Post IDs e inflan la tabla wp_posts. Limita las revisiones en wp-config.php:

define( 'WP_POST_REVISIONS', 5 ); // Keep only the last 5 revisions

O desactívalas completamente para tipos de publicaciones que no requieren historial de versiones:

define( 'WP_POST_REVISIONS', false );

Consultas de archivos adjuntos: Las consultas de la biblioteca multimedia por Post ID son comunes en plugins de galerías. Asegúrate de que la columna post_parent esté indexada si ejecutas consultas frecuentes basadas en post_parent, ya que no está indexada por defecto en el esquema de WordPress.

Proteger las referencias de Post ID en código personalizado

Exponer Post IDs en URLs del front-end o campos de formulario sin validación crea un posible vector de divulgación de información o acceso no autorizado. Valida y sanitiza siempre:

<?php
// Sanitize a Post ID received from user input
$post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;

if ( $post_id > 0 && get_post_status( $post_id ) === 'publish' ) {
    // Safe to use
    $post_data = get_post( $post_id );
} else {
    wp_die( 'Invalid post reference.', 403 );
}
?>

absint() convierte la entrada en un entero no negativo, eliminando el riesgo de inyección SQL. get_post_status() confirma que la publicación existe y es públicamente accesible antes de procesarla.

Para sitios que manejan contenido sensible con tipos de publicaciones restringidas, combina esto con verificaciones current_user_can() para aplicar control de acceso basado en capacidades.

Consideraciones de despliegue: Post IDs entre entornos

Uno de los problemas de producción más comunes en el desarrollo de WordPress involucra la deriva de Post IDs entre entornos. Cuando desarrollas localmente, creas publicaciones y luego migras a staging o producción, los Post IDs en tu base de datos local no coincidirán con los de la base de datos de producción — especialmente si el sitio de producción ya tiene contenido.

Estrategias prácticas de mitigación:

  • Almacena los Post IDs en una entrada dedicada de la tabla de opciones usando get_option() / update_option(), permitiendo que se actualicen por entorno sin cambios de código.
  • Usa slugs de publicación como claves de búsqueda en tu código, luego resuelve a IDs en tiempo de ejecución usando get_page_by_path() o una consulta personalizada — aceptando el costo marginal de rendimiento por la flexibilidad obtenida.
  • Implementa una tabla de mapeo de Post IDs en wp_options que mapee nombres semánticos (p. ej., 'homepage_hero_post') a IDs reales, configurable por entorno.

Para equipos que despliegan WordPress en VPS Hosting con pipelines de CI/CD automatizados, este enfoque de mapeo se integra limpiamente con la gestión de configuración específica por entorno.

Matriz de decisión técnica: elegir el método de búsqueda correcto

EscenarioMétodo recomendadoRazón
Búsqueda de ID única, acceso de administradorInspección de URL en wp-adminSin sobrecarga, instantáneo
Búsqueda masiva de IDs, desarrolladorWP-CLI wp post listScriptable, rápido, sin dependencia de UI
Editor no técnico necesita IDsPlugin Show IDsSeguro, no requiere código
Script automatizado del lado del servidorConsulta directa a MySQLEvita la sobrecarga del bootstrap de WordPress
Desarrollo de plantillas/pluginsget_the_ID() o get_post()Uso correcto de la API de WordPress
REST API / front-end headless/wp-json/wp/v2/posts/{id}Direccionamiento nativo de recursos REST
Portabilidad entre entornosResolución de slug a ID en tiempo de ejecuciónEvita la deriva de IDs entre entornos

Conclusiones técnicas clave: lista de verificación accionable

  • Usa siempre absint() para sanitizar Post IDs suministrados externamente antes de cualquier interacción con la base de datos.
  • Nunca codifiques Post IDs en plantillas de temas destinadas a distribución — usa búsquedas basadas en slugs o mapeos de tabla de opciones en su lugar.
  • Establece WP_POST_REVISIONS en un entero fijo en wp-config.php en sitios editoriales para controlar el crecimiento de la tabla.
  • En Multisite, llama siempre a restore_current_blog() después de switch_to_blog() para evitar la contaminación de contexto.
  • Verifica post_status y post_type en todas las consultas directas a la base de datos — la tabla wp_posts contiene registros internos de WordPress que no son contenido visible para el usuario.
  • Usa WP-CLI para operaciones masivas de Post ID en scripts de despliegue automatizados en lugar de phpMyAdmin, que está vinculado a sesiones y no es scriptable.
  • Configura una caché de objetos persistente (Redis o Memcached) en servidores de producción para evitar accesos redundantes a la base de datos de get_post() en plantillas complejas.
  • Para despliegues de WordPress headless, trata el campo id de la REST API como la referencia canónica del Post ID — es idéntico a la clave primaria de la base de datos.

Si tu instalación de WordPress se ejecuta en infraestructura que limita el acceso a la base de datos, acceso a shell o disponibilidad de WP-CLI, migrar a un entorno correctamente aprovisionado — como Servidores Dedicados con acceso root completo — elimina estas restricciones por completo y habilita toda la gama de técnicas de gestión de Post ID descritas en esta guía. Los sitios con arquitecturas complejas de tipos de publicaciones personalizadas también se benefician de combinar WordPress con Certificados SSL correctamente configurados para proteger los endpoints de la REST API que exponen recursos basados en Post ID.

Preguntas frecuentes

¿Qué sucede con un Post ID cuando se elimina una publicación en WordPress?

El ID queda retirado permanentemente. El contador AUTO_INCREMENT de MySQL no reutiliza los IDs eliminados, por lo que los huecos en la secuencia de IDs son normales y esperados. El ID nunca será reasignado a contenido nuevo.

¿Pueden dos publicaciones en el mismo sitio de WordPress compartir el mismo Post ID?

No. El Post ID es la clave primaria de la tabla wp_posts, lo que garantiza una unicidad absoluta en todos los tipos de publicaciones, estados y tipos de contenido dentro de una única instalación de WordPress. En Multisite, la unicidad está limitada a la tabla de cada subsitio.

¿Por qué mis Post IDs saltan en grandes números entre publicaciones?

Cada revisión, borrador automático y elemento del menú de navegación consume un ID de la misma secuencia de incremento automático. Una publicación con 15 revisiones habrá consumido 16 IDs en total. La actividad editorial intensa, la creación frecuente de borradores y los guardados automáticos de los constructores de páginas aceleran significativamente este contador.

¿Es seguro exponer Post IDs en URLs del front-end o solicitudes AJAX?

Los Post IDs en sí mismos no son datos sensibles — son enteros secuenciales sin valor criptográfico. El riesgo está en usarlos sin validación del lado del servidor, lo que podría permitir el acceso no autorizado a contenido no público. Valida siempre que el ID existe, verifica post_status y aplica verificaciones de capacidad antes de devolver cualquier dato.

¿Cómo encuentro el Post ID de un archivo adjunto de WordPress (archivo multimedia)?

Navega a Medios > Biblioteca, cambia a la vista de lista, pasa el cursor sobre el título del archivo adjunto y lee el parámetro post= de la URL en la barra de estado del navegador — idéntico al método utilizado para publicaciones y páginas. Alternativamente, ejecuta el siguiente comando WP-CLI:

wp post list --post_type=attachment --fields=ID,post_title,post_mime_type --format=table
15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar