Получить пользовательское поле из другого поста в карусели.

Вопрос или проблема

Я использую плагин под названием wp carousel, чтобы отображать пользовательские типы записей в карусели в нижнем колонтитуле на странице одиночного поста. По умолчанию плагин получает изображение поста и его заголовок, но я хочу добавить пользовательское поле (обычный текст), которое я добавил к пользовательскому типу записи через ACF.

Я пытался добавить это в plugins/wp-carousel/themes/default/theme-jcarousel.php

<?php global $post;
$sidans_id = $post->post_id;
$hamta_kund = get_field('kund');
echo $hamta_kund;
?>

на 192 строке (сразу после кода, который получает title).

Что это делает, так это получает пользовательское поле текущего просматриваемого поста, я хочу получить пользовательское поле, связанное с каждым постом в карусели. Поэтому каждый элемент в карусели получает одно и то же значение (значение из текущего поста).

Кто-нибудь знает, что я делаю не так?

Это документация от автора плагина. http://sumolari.com/proyecto/wp-carousel/wp-carousel-documentacion-docs/

Я пробовал форум поддержки, но нет ответа, и у меня заканчивается время с клиентом.

Вам следует использовать get_post_meta($sidans_id, 'kund', true); вместо этого. Вызов get_field использует ID из цикла постов, а не глобальный.

Ответ или решение

Чтобы извлечь произвольное поле из других записей в карусели с использованием плагина WP Carousel и Advanced Custom Fields (ACF), важно правильно использовать тактический подход при обращении к данным записи в окружении этого плагина. Основная проблема заключается в том, что вы используете идентификатор текущей записи для получения пользовательского поля, в то время как вам нужно извлекать его для каждой записи в карусели.

Шаги по корректировке вашего кода

  1. Анализ структуры карусели: Понимание, как WP Carousel работает с постами, является критически важным.
    Обычно плагин создает цикл для выборки постов, что означает, что для каждого элемента карусели у вас есть доступ к данным конкретного поста через переменную цикла.

  2. Использунок правильной функции для извлечения метаданных: Вместо get_field, используйте get_post_meta, чтобы получить произвольное поле для каждого поста в карусели. Это связано с тем, что get_field может ссылаться на текущую глобальную запись, в то время как get_post_meta позволит получить данные для каждой записи в цикле.

  3. Обновление кода:
    Измените ваш код в файле theme-jcarousel.php, чтобы он работал с правильным идентификатором поста.

<?php
// Обеспечиваем доступ к глобальной переменной
global $post;

// Получаем ID текущего поста в цикле
$post_id = get_the_ID(); // Используйте get_the_ID() чтобы получить ID текущего поста в цикле.

if ($post_id) {
    // Получаем значение произвольного поля 'kund' для данного поста
    $hamta_kund = get_post_meta($post_id, 'kund', true);

    // Выводим значение поля
    echo esc_html($hamta_kund); // Безопасный вывод
}
?>

Объяснение изменений

  • get_the_ID() — это функция, которая возвращает ID текущего поста в цикле, что позволяет избежать путаницы с глобальной переменной $post, которая может не всегда указывать на нужный пост.
  • get_post_meta($post_id, 'kund', true) — этот метод корректно извлекает значение пользовательского поля "kund" для каждой записи в карусели.
  • esc_html() — функция безопасного вывода данных, предотвращающая выполнение потенциально опасного кода, что важно для безопасности вашего сайта.

Заключение

Эти шаги обеспечат корректное извлечение произвольного поля для каждого поста в карусели, а не только для текущей открытой записи. Убедитесь, что вы протестировали изменения на локальном сервере или тестовом окружении перед размещением на живом сайте, чтобы избежать возможных ошибок. Если у вас появляются дополнительные вопросы, обратитесь к документации WP Carousel или поддержке ACF для получения более детальной информации.

Оцените материал
Добавить комментарий

Капча загружается...