Ottenere l'ID del post corrente come variabile in Javascript
Sto cercando di mostrare l'ID del post in Javascript ma non ci riesco.
var post_id = '123'; // funziona correttamente
var post_id = '<?php global $post; echo $post->ID; ?>'; // mostra 'ID; ?>'
var post_id = '<?php echo $post->ID;?>'; // mostra 'ID; ?>'
C'è un modo corretto per mostrare l'ID del post?

Puoi passare variabili a JavaScript utilizzando la funzione wp_localize_script: https://codex.wordpress.org/Function_Reference/wp_localize_script
Aggiungi il seguente codice 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');
E nel tuo file js (theme-name/js/my-script.js):
jQuery(document).ready(function($) { alert( my_script_vars.postID ); });
Nota:
Se stai cercando di passare numeri interi, dovrai chiamare la funzione JavaScript parseInt().

Questo non è sempre disponibile e non si può fare affidamento su di esso. L'input nascosto con post_ID
viene aggiunto nell'editor e non nel front end, quindi non è disponibile per l'uso in un tema. Finché sei consapevole delle limitazioni, questo potrebbe andare benissimo.

Utilizzo questo -
document.querySelector('.status-publish').getAttribute('id');
Questo ti restituisce post-xxx
dove xxx
è il numero del post. Puoi poi sostituire post-
con una stringa vuota.
var id = document.querySelector('.status-publish').getAttribute('id').replace("post-", "");

Ok, capito. Forse questo potrà essere utile a qualcuno. Nel file 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');

Sconsiglierei generalmente questo metodo. Scrivere JS all'interno di PHP è generalmente una cattiva pratica e questo metodo specifico crea uno script bloccante il rendering.
Suggerisco una soluzione intermedia tra i vari suggerimenti. Assumendo che tu stia usando un tema come quello dell'OP, puoi facilmente aggiungere un input nascosto in HTML e passare l'ID del post usando get_the_ID()
. (All'interno dei tuoi file template, oppure potrebbe essere aggiunto a header.php)
Una volta che hai l'input nascosto (anche se onestamente potrebbe essere qualsiasi elemento DOM), è facilmente richiamabile da jQuery.
Questo metodo permette di verificare in modo sicuro i permessi ed evita il blocco del rendering.

Potresti averne bisogno in PHP, ma ecco una soluzione in puro JavaScript... anche se sei alla mercé di WordPress che mantiene la classe "post-XXX" nel body.
function getWordPressPostId() {
let postID = null;
try {
document.getElementsByTagName("body")[0].classList.forEach((cls) => {
if(cls.startsWith("postid-")) {
postID = cls.split("-")[1];
}
});
} catch(exc) {
// ... gestisci l'eccezione
}
return postID;
}

Nelle schermate di modifica degli articoli quando Gutenberg è attivo, puoi utilizzare una variabile JS impostata dall'oggetto wp.media
.
wp.media.view.settings.post.id,
Sul front end, il miglior approccio è già stato descritto sopra.

NB. A partire da WP 4.5 si raccomanda di utilizzare wp_add_inline_script(), invece di wp_localize_script() - quest'ultimo essendo destinato alla localizzazione.

Per recuperare l'ID del post corrente in JS all'interno di un ambiente WordPress, solitamente è necessario passare l'ID del post da PHP a JS utilizzando wp_localize_script()
o incorporarlo direttamente nel markup HTML.
Per prima cosa, accoda il tuo file JS nel file functions.php
del tuo tema
function enqueue_custom_script() {
// Accoda il tuo file JavaScript
wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), '', true);
// Passa l'ID del post al file JavaScript
global $post;
wp_localize_script('custom-script', 'post_id_object', array('post_id' => $post->ID));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_script');
Nel file custom-script.js
, puoi accedere alla variabile dell'ID del post in questo modo
// Accedi alla variabile dell'ID del post passata da PHP
var post_id = post_id_object.post_id;
console.log(post_id); // Mostra l'ID del post nella console del browser
