¿Qué es $post_id? ¿Es una variable global en WordPress?
¿Cómo se puede usar $post_id
al mostrar publicaciones en single.php?
¿Es una variable global?

No, $post_id
no es una variable global. Puedes ver una lista de variables globales que WordPress crea aquí: https://codex.wordpress.org/Global_Variables
$post_id
es simplemente una convención común de nomenclatura para una variable que contiene un ID de entrada. En tutoriales y códigos de ejemplo, indica que se espera que el valor sea un ID de entrada, pero aún necesitas haber definido su valor en algún otro lugar del código.
Si estás dentro de El Loop, puedes obtener el ID de la página o entrada actual en el loop con $post_id = get_the_ID()
. Si estás fuera del Loop y quieres obtener el ID de la entrada o página consultada actualmente, puedes usar $post_id = get_queried_object_id()
.
Otra forma en que podrías obtener un ID de entrada es en una devolución de llamada (callback) de un hook. Por ejemplo, en el hook post_thumbnail_size
, la devolución de llamada recibe un ID de entrada como segundo argumento:
function wpse_299132_post_thumbnail_size( $size, $post_id ) {
return $size;
}
add_filter( 'post_thumbnail_size', 'wpse_299132_post_thumbnail_size', 10, 2 );
Pero ese es solo el nombre utilizado en la documentación para dejar claro qué contiene la variable. Puedes llamarla como prefieras. Esto también es válido, por ejemplo:
function wpse_299132_post_thumbnail_size( $size, $myPostId ) {
return $size;
}
add_filter( 'post_thumbnail_size', 'wpse_299132_post_thumbnail_size', 10, 2 );
$myPostId
es el segundo argumento, por lo que contendrá un ID de entrada. Pero cómo lo llames no importa.

En algunos casos, como cuando estás fuera de The Loop, puede que necesites usar
get_queried_object_id() en lugar de get_the_ID().
$postID = get_queried_object_id();
