Obține ID-ul postării curente ca variabilă în Javascript

15 dec. 2015, 02:51:53
Vizualizări: 43.9K
Voturi: 4

Î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?

2
Comentarii

O faci în afara loop-ului sau în interior? Și de asemenea poți folosi a doua metodă pentru a-l afișa. Dar ține minte că dacă îl pui între ghilimele simple, atunci va fi considerat ca un șir de caractere. Trebuie să-l parsezi înainte de a-l folosi.

Kvvaradha Kvvaradha
15 dec. 2015 03:00:14

Ai verificat get_queried_object_id() sau get_the_ID()?

jgraup jgraup
15 dec. 2015 03:02:48
Toate răspunsurile la întrebare 11
0
13

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

15 dec. 2015 06:12:06
1

Este disponibil în câmpul ascuns post_ID atât pentru articolele publicate, cât și pentru cele noi. Îl puteți obține folosind acest simplu cod jQuery.

jQuery("#post_ID").val()
14 iun. 2017 21:12:20
Comentarii

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.

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

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-", "");
4 sept. 2019 22:14:21
Comentarii

Este genial. Mulțumesc!

ronnefeldt ronnefeldt
22 feb. 2023 16:23:12
2

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');
15 dec. 2015 02:59:03
Comentarii

Aș elimina $type = $current_screen->post_type;

talsibony talsibony
9 ian. 2018 19:11:42

Î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.

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

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

către frontend postID = jQuery('article').attr('id').slice(5);

către backend post_ID = jQuery('#post_ID').val();

21 feb. 2020 15:20:41
Comentarii

Soluția de front-end este o abordare foarte dependentă de temă.

Oksana Romaniv Oksana Romaniv
15 iun. 2020 13:11:21
0

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.

18 feb. 2021 22:39:33
0

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.

Vezi: wp_localize_script() > Mai multe informații

wp_add_inline_script()

6 mai 2021 10:33:55
1

Folosesc document.getElementById('cdp-current-post-id').value în WordPress 6.4

27 feb. 2024 20:09:57
Comentarii

Eroare neprinsă de tipul TypeError: document.getElementById(...) este null

Fanky Fanky
25 mar. 2024 14:26:44
0

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

Dacă te referi la partea de frontend, iată soluția mea scurtă pentru a extrage ID-ul din clasa body:

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

Nu este nevoie de PHP, astfel încât poți păstra scripturile js separate.

25 mar. 2024 14:24:05