Получение ID текущей записи как переменной в Javascript
Я пытаюсь вывести 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 записи?

Вы можете передавать переменные в 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.

Я использую это -
document.querySelector('.status-publish').getAttribute('id');
Это возвращает post-xxx
, где xxx
— это номер записи. Затем вы можете заменить post-
на пустую строку.
var id = document.querySelector('.status-publish').getAttribute('id').replace("post-", "");

Хорошо, понял. Возможно, это кому-то поможет. В файле 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');

Я бы в целом избегал этого метода. Написание JS внутри PHP — это обычно плохая практика, и этот конкретный метод создает блокирующий рендеринг скрипт.
Предлагаю компромиссное решение между предложенными вариантами. Если вы используете тему, как у автора вопроса, вы можете легко добавить скрытое поле ввода в HTML и передать ID записи с помощью get_the_ID()
. (Внутри ваших файлов шаблонов или это можно добавить в header.php)
Как только у вас будет скрытое поле ввода (хотя это может быть любой DOM-элемент), его можно легко вызвать из jQuery.
Этот метод позволяет безопасно проверять разрешения и избегать блокировки рендеринга.

Возможно, вам нужно это на 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;
}

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

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

Для получения 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 записи в консоль браузера
