Вопрос или проблема
Я использую плагин под названием 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), важно правильно использовать тактический подход при обращении к данным записи в окружении этого плагина. Основная проблема заключается в том, что вы используете идентификатор текущей записи для получения пользовательского поля, в то время как вам нужно извлекать его для каждой записи в карусели.
Шаги по корректировке вашего кода
-
Анализ структуры карусели: Понимание, как WP Carousel работает с постами, является критически важным.
Обычно плагин создает цикл для выборки постов, что означает, что для каждого элемента карусели у вас есть доступ к данным конкретного поста через переменную цикла. -
Использунок правильной функции для извлечения метаданных: Вместо
get_field
, используйтеget_post_meta
, чтобы получить произвольное поле для каждого поста в карусели. Это связано с тем, чтоget_field
может ссылаться на текущую глобальную запись, в то время какget_post_meta
позволит получить данные для каждой записи в цикле. -
Обновление кода:
Измените ваш код в файле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 для получения более детальной информации.