Ottenere l'ID del post corrente come variabile in Javascript

15 dic 2015, 02:51:53
Visualizzazioni: 43.9K
Voti: 4

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?

2
Commenti

Lo stai facendo fuori dal loop o dentro? E puoi anche usare il secondo metodo per visualizzarlo. Ma ricorda che se lo metti tra virgolette singole verrà considerato come una stringa. Devi analizzarlo prima di usarlo

Kvvaradha Kvvaradha
15 dic 2015 03:00:14

Hai provato get_queried_object_id() o get_the_ID()?

jgraup jgraup
15 dic 2015 03:02:48
Tutte le risposte alla domanda 11
0
13

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().

15 dic 2015 06:12:06
1

È disponibile nel campo nascosto post_ID sia per gli articoli pubblicati che per quelli nuovi. Puoi ottenerlo utilizzando questo semplice codice jQuery.

jQuery("#post_ID").val()
14 giu 2017 21:12:20
Commenti

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.

Morgan Estes Morgan Estes
7 mar 2018 19:50:23
1

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-", "");
4 set 2019 22:14:21
Commenti

Questo è brillante. Grazie!

ronnefeldt ronnefeldt
22 feb 2023 16:23:12
2

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');
15 dic 2015 02:59:03
Commenti

Rimuoverei il $type = $current_screen->post_type;

talsibony talsibony
9 gen 2018 19:11:42

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.

JRad the Bad JRad the Bad
4 mag 2019 21:49:51
0

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;
}
7 mar 2024 22:46:18
1

a frontend postID = jQuery('article').attr('id').slice(5);

a backend post_ID = jQuery('#post_ID').val();

21 feb 2020 15:20:41
Commenti

La soluzione front-end è un approccio molto dipendente dal tema.

Oksana Romaniv Oksana Romaniv
15 giu 2020 13:11:21
0

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.

18 feb 2021 22:39:33
0

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.

Vedi: wp_localize_script() > Maggiori informazioni

wp_add_inline_script()

6 mag 2021 10:33:55
1

Sto utilizzando document.getElementById('cdp-current-post-id').value in WordPress 6.4

27 feb 2024 20:09:57
Commenti

Errore non catturato TypeError: document.getElementById(...) è null

Fanky Fanky
25 mar 2024 14:26:44
0

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
28 feb 2024 13:25:50
0

Se intendi sul frontend, ecco la mia soluzione in una riga per estrarre l'id dalla classe del body:

var postid = $("body")[0].className.match(/postid-\d+/)[0].split("-")[1];

Non c'è bisogno di PHP così puoi mantenere i tuoi script js separati.

25 mar 2024 14:24:05