Obține ID-ul postării curente ca variabilă în Javascript
Încerc să afișez ID-ul postării în JavaScript și nu reușesc.
var post_id = '123'; // funcționează bine
var post_id = '<?php global $post; echo $post->ID; ?>'; // afișează 'ID; ?>'
var post_id = '<?php echo $post->ID;?>'; // afișează 'ID; ?>'
Există o modalitate corectă de a afișa ID-ul postării?

Puteți transmite variabile către JavaScript folosind funcția wp_localize_script: https://codex.wordpress.org/Function_Reference/wp_localize_script
Adăugați următoarele în 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');
Și fișierul dvs. js (theme-name/js/my-script.js):
jQuery(document).ready(function($) {
alert( my_script_vars.postID );
});
Notă:
Dacă încercați să transmiteți valori întregi, va trebui să apelați funcția JavaScript parseInt().

Aceasta nu este întotdeauna disponibilă și nu poate fi considerată de încredere. Input-ul ascuns cu post_ID
este adăugat în editor și nu în partea de front end, așa că nu este disponibil pentru utilizare într-o temă. Atâta timp cât ești conștient de limitări, acest lucru poate fi perfect acceptabil.

Eu folosesc asta -
document.querySelector('.status-publish').getAttribute('id');
Aceasta returnează post-xxx
unde xxx
este numărul postării. Apoi poți înlocui post-
cu un string gol.
var id = document.querySelector('.status-publish').getAttribute('id').replace("post-", "");

Bine, am înțeles. Poate asta va ajuta pe cineva. În functions.php al temei:
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');

În general, aș evita această metodă. Scrierea de JS în interiorul PHP este de obicei o practică proastă, iar această metodă specifică creează un script care blochează randarea.
Sugerez o soluție la mijloc între sugestii. Presupunând că folosești o temă ca cea din întrebarea originală, poți adăuga cu ușurință un input ascuns în HTML și poți transmite ID-ul postului folosind get_the_ID()
. (În interiorul fișierelor tale de template, sau ar putea fi adăugat în header.php)
Odată ce ai input-ul ascuns (deși ar putea fi orice element DOM), poți să-l apelezi ușor din JQuery.
Această metodă permite verificarea securizată a permisiunilor și evită blocarea randării.

Poate ai nevoie de o soluție în PHP, dar iată o soluție pur JavaScript... deși depinzi de faptul că WordPress păstrează clasa "post-XXX" în tag-ul body.
function getWordPressPostId() {
let postID = null;
try {
document.getElementsByTagName("body")[0].classList.forEach((cls) => {
if(cls.startsWith("postid-")) {
postID = cls.split("-")[1];
}
});
} catch(exc) {
// ... gestionare excepție
}
return postID;
}

Pe ecranele de editare a articolelor, când Gutenberg este activat, puteți utiliza o variabilă JS setată de obiectul wp.media
.
wp.media.view.settings.post.id,
Pe partea de front-end, cea mai bună abordare a fost deja descrisă mai sus.

NB. Începând cu WP 4.5, este recomandat să folosiți wp_add_inline_script(), în loc de wp_localize_script() - aceasta din urmă fiind destinată pentru localizare.

Pentru a obține ID-ul postării curente în JS într-un mediu WordPress, de obicei trebuie să transmiți ID-ul postării de la PHP la JS folosind wp_localize_script()
sau să-l încorporați direct în marcajul HTML.
Mai întâi, încărcați fișierul JS în fișierul functions.php
al temei dumneavoastră
function enqueue_custom_script() {
// Încărcați fișierul JavaScript
wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), '', true);
// Transmiteți ID-ul postării către fișierul JavaScript
global $post;
wp_localize_script('custom-script', 'post_id_object', array('post_id' => $post->ID));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_script');
În fișierul custom-script.js
, puteți accesa variabila ID-ului postării astfel:
// Accesați variabila ID-ului postării transmisă din PHP
var post_id = post_id_object.post_id;
console.log(post_id); // Afișați ID-ul postării în consola browserului
