Получение ID текущей записи как переменной в Javascript

15 дек. 2015 г., 02:51:53
Просмотры: 43.9K
Голосов: 4

Я пытаюсь вывести ID записи в Javascript и у меня не получается.

var post_id = '123';  // работает нормально

var post_id = '<?php global $post; echo $post->ID; ?>';  // выводит 'ID; ?>'

var post_id = '<?php echo $post->ID;?>';  // выводит 'ID; ?>'

Есть ли правильный способ вывести ID записи?

2
Комментарии

Вы делаете это вне цикла или внутри? Также вы можете использовать второй метод для вывода. Но помните, если вы поместите его в одинарные кавычки, то он будет считаться строкой. Вам нужно его распарсить перед использованием.

Kvvaradha Kvvaradha
15 дек. 2015 г. 03:00:14

Вы проверили get_queried_object_id() или get_the_ID()?

jgraup jgraup
15 дек. 2015 г. 03:02:48
Все ответы на вопрос 11
0
13

Вы можете передавать переменные в JavaScript с помощью функции wp_localize_script: https://codex.wordpress.org/Function_Reference/wp_localize_script

Добавьте следующий код в 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');

И ваш JavaScript файл (theme-name/js/my-script.js):


jQuery(document).ready(function($) {
        alert( my_script_vars.postID );
});

Примечание:

Если вы пытаетесь передать целые числа, вам нужно будет вызвать функцию parseInt() в JavaScript.

15 дек. 2015 г. 06:12:06
1

Он доступен в скрытом поле post_ID как для опубликованных, так и для новых записей. Вы можете получить его с помощью этого простого jQuery кода.

jQuery("#post_ID").val()
14 июн. 2017 г. 21:12:20
Комментарии

Это не всегда доступно, и на это нельзя полагаться. Скрытое поле ввода с post_ID добавляется в редакторе, а не на фронтенде, поэтому оно недоступно для использования в теме. Если вы осознаёте ограничения, это может быть вполне приемлемым решением.

Morgan Estes Morgan Estes
7 мар. 2018 г. 19:50:23
1

Я использую это -

document.querySelector('.status-publish').getAttribute('id');

Это возвращает post-xxx, где xxx — это номер записи. Затем вы можете заменить post- на пустую строку.

var id = document.querySelector('.status-publish').getAttribute('id').replace("post-", "");
4 сент. 2019 г. 22:14:21
Комментарии

Это потрясающе. Спасибо!

ronnefeldt ronnefeldt
22 февр. 2023 г. 16:23:12
2

Хорошо, понял. Возможно, это кому-то поможет. В файле functions.php темы:

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 дек. 2015 г. 02:59:03
Комментарии

Я бы убрал $type = $current_screen->post_type;

talsibony talsibony
9 янв. 2018 г. 19:11:42

Я бы в целом избегал этого метода. Написание JS внутри PHP — это обычно плохая практика, и этот конкретный метод создает блокирующий рендеринг скрипт.

Предлагаю компромиссное решение между предложенными вариантами. Если вы используете тему, как у автора вопроса, вы можете легко добавить скрытое поле ввода в HTML и передать ID записи с помощью get_the_ID(). (Внутри ваших файлов шаблонов или это можно добавить в header.php)

Как только у вас будет скрытое поле ввода (хотя это может быть любой DOM-элемент), его можно легко вызвать из jQuery.

Этот метод позволяет безопасно проверять разрешения и избегать блокировки рендеринга.

JRad the Bad JRad the Bad
4 мая 2019 г. 21:49:51
0

Возможно, вам нужно это на PHP, но вот чисто JavaScript решение... хотя вы зависите от того, сохранит ли WordPress класс "post-XXX" в body.

function getWordPressPostId() {
    let postID = null;
    try {
        document.getElementsByTagName("body")[0].classList.forEach((cls) => {
            if(cls.startsWith("postid-")) {
                postID = cls.split("-")[1];
            }
        });
    } catch(exc) {
        // ... обработка исключения
    }
    return postID;
}
7 мар. 2024 г. 22:46:18
1

во фронтенд postID = jQuery('article').attr('id').slice(5);

в бэкенд post_ID = jQuery('#post_ID').val();

21 февр. 2020 г. 15:20:41
Комментарии

Фронтенд-решение сильно зависит от используемой темы (очень тесно привязано к конкретной теме).

Oksana Romaniv Oksana Romaniv
15 июн. 2020 г. 13:11:21
0

На экранах редактирования записей, когда включен Gutenberg, вы можете использовать JS-переменную, заданную объектом wp.media.

wp.media.view.settings.post.id,

Для фронтенда лучший подход уже был описан выше.

18 февр. 2021 г. 22:39:33
0

Примечание: Начиная с WordPress 4.5 рекомендуется использовать wp_add_inline_script() вместо wp_localize_script(), так как последний предназначен для локализации.

Смотрите: wp_localize_script() > Подробнее

wp_add_inline_script()

6 мая 2021 г. 10:33:55
1

Я использую document.getElementById('cdp-current-post-id').value в WordPress 6.4

27 февр. 2024 г. 20:09:57
Комментарии

Необработанная ошибка TypeError: document.getElementById(...) равен null

Fanky Fanky
25 мар. 2024 г. 14:26:44
0

Для получения ID текущей записи в JS в среде WordPress обычно требуется передать ID записи из PHP в JS с использованием wp_localize_script() или встроить его непосредственно в HTML-разметку.

Сначала подключите ваш JS-файл в файле functions.php вашей темы

function enqueue_custom_script() {
    // Подключаем ваш JavaScript файл
    wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), '', true);
    
    // Передаем ID записи в JavaScript файл
    global $post;
    wp_localize_script('custom-script', 'post_id_object', array('post_id' => $post->ID));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_script');

В файле custom-script.js вы можете получить доступ к переменной ID записи следующим образом

// Доступ к переменной ID записи, переданной из PHP
var post_id = post_id_object.post_id;
console.log(post_id); // Выводим ID записи в консоль браузера
28 февр. 2024 г. 13:25:50
0

Если вы имеете в виду фронтенд, вот мой однострочник для извлечения ID из класса body:

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

Не требуется PHP, поэтому вы можете держать ваши JS-скрипты отдельно.

25 мар. 2024 г. 14:24:05