Как использовать ACF без выбора шаблонного файла с помощью шорткода WordPress?

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

Я создал один кастомный файл шаблона. И сделал его динамическим с помощью ACF, а также создал шорткод для этого шаблона. Он хорошо работает для моего шаблона, но когда я использую шорткод на другой странице, я не получаю мой динамический контент.

Может кто-то помочь мне.

<?php
/**
 * Имя шаблона: Главный шаблон
 * Тип поста шаблона: пост, страница
 */

?>

<h1><?php echo esc_html( get_field('portfolio_1') ); ?></h1>
<h2><?php echo esc_html( get_field('portfolio_des_1') ); ?></h2>

function custom_theme_load_sponsors_template() {
  ob_start();
  get_template_part( 'custom-tempates/mytemplate' ); 
  return ob_get_clean();
}
add_shortcode( 'sponsor_main_page', 'custom_theme_load_sponsors_template' );

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

Использование ACF (Advanced Custom Fields) с шорткодами в WordPress может быть довольно эффективным способом динамического отображения контента. Однако вы столкнулись с проблемой отсутствия динамического контента при использовании шорткода на других страницах. Давайте разберем это по шагам, чтобы понять, как решить вашу проблему.

1. Понимание проблемы

Ваш код создает шорткод для вызова кастомного шаблона, но когда этот шорткод используется, он не отображает данные, которые вы ожидаете получить из полей ACF. Причина может заключаться в том, что функции get_field() не находят данные для текущей страницы, на которой вы используете шорткод.

2. Корректировка кода

Сначала убедитесь, что вы правильно получаете данные из ACF. Если шаблон, который вы загружаете с помощью get_template_part(), использует get_field(), поля должны быть связаны с текущим постом (или страницей). Если вы просто подключаете шаблон, находясь на другой странице, то поля могут быть не связаны с этой страницей.

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

3. Обновленный код

Вот пример, как можно это сделать:

function custom_theme_load_sponsors_template() {
    ob_start();

    // Получаем текущий пост ID
    $current_post_id = get_the_ID();

    // Получаем поля ACF для текущего поста
    $portfolio_1 = get_field('portfolio_1', $current_post_id);
    $portfolio_des_1 = get_field('portfolio_des_1', $current_post_id);

    // Включаем шаблон
    include get_template_directory() . '/custom-templates/mytemplate.php';

    return ob_get_clean();
}
add_shortcode('sponsor_main_page', 'custom_theme_load_sponsors_template');

В этом коде мы сохраняем ID текущего поста, а затем передаем его в get_field(). Теперь ваши поля ACF будут искаться на странице, где используется ваш шорткод.

4. Проверка наличия значений

Предусмотрите в вашем шаблоне проверки наличия значений перед их отображением, чтобы избежать ошибок:

<h1><?php echo esc_html($portfolio_1 ? $portfolio_1 : 'Значение отсутствует'); ?></h1>
<h2><?php echo esc_html($portfolio_des_1 ? $portfolio_des_1 : 'Описание отсутствует'); ?></h2>

5. Использование шорткодов

Теперь вы можете использовать ваш шорткод [sponsor_main_page] на любой странице, и он должен отображать соответствующие поля ACF, если они установлены для текущей страницы.

Заключение

Использование ACF в шорткодах — это мощный инструмент, который позволяет отображать динамический контент. Убедитесь, что поля ACF правильно связаны с постами и корректно извлекаются в вашем коде. Если у вас возникли дополнительные вопросы или проблемы, не стесняйтесь их задавать.

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

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