Obtener el ID de la entrada actual como una variable en Javascript
Estoy tratando de mostrar el ID de la entrada en Javascript y no lo consigo.
var post_id = '123'; // funciona bien
var post_id = '<?php global $post; echo $post->ID; ?>'; // muestra 'ID; ?>'
var post_id = '<?php echo $post->ID;?>'; // muestra 'ID; ?>'
¿Hay una forma correcta de mostrar el ID de la entrada?

Puedes pasar variables a JavaScript usando la función wp_localize_script: https://codex.wordpress.org/Function_Reference/wp_localize_script
Añade lo siguiente a functions.php
if(!function_exists('load_my_script')){ function load_my_script() { global $post; $deps = array('jquery'); $version= '1.0'; $in_footer = true; wp_enqueue_script('my-script', get_stylesheet_directory_uri() . '/js/my-script.js', $deps, $version, $in_footer); wp_localize_script('my-script', 'my_script_vars', array( 'postID' => $post->ID ) ); } } add_action('wp_enqueue_scripts', 'load_my_script');
Y tu archivo js (theme-name/js/my-script.js):
jQuery(document).ready(function($) { alert( my_script_vars.postID ); });
Nota:
Si estás intentando pasar números enteros necesitarás llamar a la función JavaScript parseInt().

Esto no siempre está disponible y no se puede confiar en ello. El campo oculto con post_ID
se agrega en el editor y no en la parte frontal, por lo que no está disponible para usar en un tema. Siempre y cuando conozcas las limitaciones, esto puede estar perfectamente bien.

Yo uso esto -
document.querySelector('.status-publish').getAttribute('id');
Esto te da post-xxx
donde xxx
es el número del post. Luego puedes reemplazar post-
con una cadena vacía.
var id = document.querySelector('.status-publish').getAttribute('id').replace("post-", "");

Vale, lo tengo. Quizás esto le ayude a alguien. En el archivo functions.php del tema:
function pid() {
global $current_screen;
$type = $current_screen->post_type;
?>
<script type="text/javascript">
var post_id = '<?php global $post; echo $post->ID; ?>';
</script>
<?php
}
add_action('wp_head','pid');

Generalmente evitaría este método. Escribir JS dentro de PHP es generalmente una mala práctica y este método en particular crea un script que bloquea el renderizado.
Sugiero una solución intermedia entre las sugerencias. Asumiendo que estás usando un tema como el mencionado, puedes fácilmente añadir un input oculto en HTML y pasar el ID del post usando get_the_ID()
. (Dentro de tus archivos de plantilla, o podría agregarse a header.php)
Una vez que tienes el input oculto (aunque honestamente podría ser cualquier elemento DOM), es fácilmente accesible desde JQuery.
Este método permite verificar permisos de forma segura y evita el bloqueo de renderizado.

Quizás lo necesites en PHP pero aquí tienes una solución en JavaScript puro... aunque dependes de que WordPress mantenga la clase "post-XXX" en el body.
function getWordPressPostId() {
let postID = null;
try {
document.getElementsByTagName("body")[0].classList.forEach((cls) => {
if(cls.startsWith("postid-")) {
postID = cls.split("-")[1];
}
});
} catch(exc) {
// ... manejar excepción
}
return postID;
}

En las pantallas de edición de entradas cuando Gutenberg está activado, puedes usar una variable JS definida por el objeto wp.media
.
wp.media.view.settings.post.id,
En el front-end, el mejor enfoque ya fue descrito anteriormente.

Nota: A partir de WordPress 4.5 se recomienda usar wp_add_inline_script(), en lugar de wp_localize_script() - este último está destinado para la localización.

Para obtener el ID de la publicación actual en JS dentro de un entorno de WordPress, normalmente necesitas pasar el ID de la publicación desde PHP a JS usando wp_localize_script()
o incrustarlo directamente en el marcado HTML.
Primero, encola tu archivo JS en el archivo functions.php
de tu tema:
function enqueue_custom_script() {
// Encuela tu archivo JavaScript
wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), '', true);
// Pasa el ID de la publicación al archivo JavaScript
global $post;
wp_localize_script('custom-script', 'post_id_object', array('post_id' => $post->ID));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_script');
En el archivo custom-script.js
, puedes acceder a la variable del ID de la publicación así:
// Accede a la variable del ID de la publicación pasada desde PHP
var post_id = post_id_object.post_id;
console.log(post_id); // Muestra el ID de la publicación en la consola del navegador
