Как вывести поле на опреденной странице в WordPress?

Ссылка скопирована
1 ответ

Всем привет, нужно вывести поле ACF внутри определенного типа материалов а так же внутри страницы этого типа.

Хочу применить фильтр в function.php
На просторах стети нашел пример

add_filter( 'render_block_core/post-title', function( $block_content, $block ) { 	echo '<pre>'; 	var_dump($block); 	if(!empty($block["attrs"]["className"]) && $block["attrs"]["className"] != "company") return $block_content; 	return sprintf("<div class='%s'>Дата : %s</div>%s","has-link-color wp-block-post-title has-extra-large-font-size has-crc-65-font-family",get_field("data_konczerta"),$block_content); </div>%s","10px",get_field("data_konczerta"),$block_content); }, 10, 2 );

add_filter( 'render_block_core/post-title', function( $block_content, $block ) { echo '<pre>'; var_dump($block); if(!empty($block["attrs"]["className"]) && $block["attrs"]["className"] != "company") return $block_content; return sprintf("<div class='%s'>Дата : %s</div>%s","has-link-color wp-block-post-title has-extra-large-font-size has-crc-65-font-family",get_field("data_konczerta"),$block_content); </div>%s","10px",get_field("data_konczerta"),$block_content); }, 10, 2 );

по логике должно искать блок с определнным CSS но оно не работает.

Дополнительно:

Ошибки синтаксиса нет? Скобки {} везде правильно открыли и закрыли?

  • Дмитрий, с этим все норм. проблема в другом. Что var_dump дает массив полей и там нету нужного аттрибута
  • Как все блоки получить на странице ?
    render_block_core/post-title ?? это заголовок
  • В настройках поля в acf задаёшь при каких условиях его выводить в бекенде. а на фронте уже проверяешь эти же условия.
  • Refguser, Я тут слегка новичок. Не совсем понимаю где это настраивается.
  • Константин, учить матчасть нужно..
    Настройки в ацф
    Иерархия шаблонов
    Функции условий
    Дочерние темы
    Написание плагина
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Backend-редакция Ответ

    Если нужно вывести ACF-поле только на определённой странице или внутри определённого типа материалов, сначала выберите правильную точку вывода. Фильтр render_block_core/post-title сработает только для блока Gutenberg “Post Title”, и он не всегда подходит для обычных шаблонов темы. Для классического single.php проще вывести поле прямо в шаблоне. Для блочной темы можно использовать block render filter.

    В Вашем коде есть несколько проблем: используется echo внутри фильтра, проверка класса написана небезопасно, часть sprintf() выглядит обрезанной. Фильтр должен возвращать строку, а не печатать её напрямую.

    Пример аккуратной подстановки поля перед заголовком только для блока с классом company:

    add_filter('render_block_core/post-title', function ($block_content, $block) {
        $class = $block['attrs']['className'] ?? '';
     
        if (strpos($class, 'company') === false) {
            return $block_content;
        }
     
        $date = get_field('data_konczerta', get_the_ID());
        if (!$date) {
            return $block_content;
        }
     
        $extra = sprintf(
            '<div class="company-date">Дата: %s</div>',
            esc_html($date)
        );
     
        return $extra . $block_content;
    }, 10, 2);

    add_filter('render_block_core/post-title', function ($block_content, $block) { $class = $block['attrs']['className'] ?? ''; if (strpos($class, 'company') === false) { return $block_content; } $date = get_field('data_konczerta', get_the_ID()); if (!$date) { return $block_content; } $extra = sprintf( '<div class="company-date">Дата: %s</div>', esc_html($date) ); return $extra . $block_content; }, 10, 2);

    Если поле нужно выводить только в конкретном CPT, добавьте проверку get_post_type(). Если только на конкретной странице, проверяйте is_page(123) или get_the_ID(). Для ACF всегда используйте get_field() и экранируйте вывод: текст через esc_html(), HTML через wp_kses_post(), URL через esc_url().

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно