Как изменить привязку id рубрики?

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

Всем добрый день! Сделал показ блока на странице записи при условии что эта запись имеет назначенную рубрику с id 88, но не могу придумать как заменить этот привязанный id на значение указанное в поле acf на странице редактирования блока в админке.

Регистрация типа записи и поля ACF

function register_promo_type() {     register_post_type('promo', array(         'labels' => array(             'name' => 'Промо',             'singular_name' => 'Промо',         ),         'public' => true,         'supports' => array('title'),         'has_archive' => false,         'menu_icon' => 'dashicons-megaphone',      )); } add_action('init', 'register_promo_post_type');  if( function_exists('acf_add_local_field_group') ):  acf_add_local_field_group(array(     'key' => 'group_promo',     'title' => 'Настройки',     'fields' => array(         array(             'key' => 'field_promo_taxonomy_id',             'label' => 'ID Таксономии',             'name' => 'promo_taxonomy_id',             'type' => 'text',         ),     ),     'location' => array(         array(             array(                 'param' => 'post_type',                 'operator' => '==',                 'value' => 'promo',             ),         ),     ), ));

function register_promo_type() { register_post_type('promo', array( 'labels' => array( 'name' => 'Промо', 'singular_name' => 'Промо', ), 'public' => true, 'supports' => array('title'), 'has_archive' => false, 'menu_icon' => 'dashicons-megaphone', )); } add_action('init', 'register_promo_post_type'); if( function_exists('acf_add_local_field_group') ): acf_add_local_field_group(array( 'key' => 'group_promo', 'title' => 'Настройки', 'fields' => array( array( 'key' => 'field_promo_taxonomy_id', 'label' => 'ID Таксономии', 'name' => 'promo_taxonomy_id', 'type' => 'text', ), ), 'location' => array( array( array( 'param' => 'post_type', 'operator' => '==', 'value' => 'promo', ), ), ), ));

Функция для показа блока в записи с рубрикой

function display_promo_after_content($content) {     if (is_singular('post')) {          $current_post = get_queried_object();           $taxonomy_id = get_field('promo_taxonomy_id');          if (has_term(88, 'category', $current_post)) {              $args = array(                 'post_type' => 'promo,                 'posts_per_page' => -1,              );              $promo_blocks = new WP_Query($args);              if ($promo_blocks->have_posts()) {                 while ($promo_blocks->have_posts()) {                     $promo_blocks->the_post();                      $title = get_field('promo_title');                     $subtitle = get_field('promo_subtitle');                     $button_text = get_field('promo_button_text');                     $button_link = get_field('promo_button_link');                     $title_color = get_field('promo_title_color');                     $subtitle_color = get_field('promo_subtitle_color');                     $button_bg_color = get_field('promo_button_bg_color');                     $bg_color = get_field('promo_bg_color');                     $border_color = get_field('promo_border_color');                      $promo_html = '<div class="container" style="background-color: ' . esc_attr($bg_color) . '; border: 1px solid ' . esc_attr($border_color) . ';">';                     $promo_html .= '<div class="column">';                     $promo_html .= '<h2 style="color: ' . esc_attr($title_color) . ';">' . esc_html($title) . '</h2>';                     if (!empty($subtitle)) {                         $promo_html .= '<p style="color: ' . esc_attr($subtitle_color) . ';">' . esc_html($subtitle) . '</p>';                     }                     $promo_html .= '</div>';                     $promo_html .= '<div class="column">';                     if (!empty($button_text) && !empty($button_link)) {                         $promo_html .= '<a href="' . esc_url($button_link) . '" class="btn" style="background-color: ' . esc_attr($button_bg_color) . ';">' . esc_html($button_text) . '</a>';                     }                     $promo_html .= '</div>';                     $promo_html .= '</div>';                      $content .= $promo_html;                 }                 wp_reset_postdata();              }         }     }      return $content; }  add_filter('the_content', 'display_blocks_after_content');

function display_promo_after_content($content) { if (is_singular('post')) { $current_post = get_queried_object(); $taxonomy_id = get_field('promo_taxonomy_id'); if (has_term(88, 'category', $current_post)) { $args = array( 'post_type' => 'promo, 'posts_per_page' => -1, ); $promo_blocks = new WP_Query($args); if ($promo_blocks->have_posts()) { while ($promo_blocks->have_posts()) { $promo_blocks->the_post(); $title = get_field('promo_title'); $subtitle = get_field('promo_subtitle'); $button_text = get_field('promo_button_text'); $button_link = get_field('promo_button_link'); $title_color = get_field('promo_title_color'); $subtitle_color = get_field('promo_subtitle_color'); $button_bg_color = get_field('promo_button_bg_color'); $bg_color = get_field('promo_bg_color'); $border_color = get_field('promo_border_color'); $promo_html = '<div class="container" style="background-color: ' . esc_attr($bg_color) . '; border: 1px solid ' . esc_attr($border_color) . ';">'; $promo_html .= '<div class="column">'; $promo_html .= '<h2 style="color: ' . esc_attr($title_color) . ';">' . esc_html($title) . '</h2>'; if (!empty($subtitle)) { $promo_html .= '<p style="color: ' . esc_attr($subtitle_color) . ';">' . esc_html($subtitle) . '</p>'; } $promo_html .= '</div>'; $promo_html .= '<div class="column">'; if (!empty($button_text) && !empty($button_link)) { $promo_html .= '<a href="' . esc_url($button_link) . '" class="btn" style="background-color: ' . esc_attr($button_bg_color) . ';">' . esc_html($button_text) . '</a>'; } $promo_html .= '</div>'; $promo_html .= '</div>'; $content .= $promo_html; } wp_reset_postdata(); } } } return $content; } add_filter('the_content', 'display_blocks_after_content');

Просьба подсказать или направить в нужную сторону, сам что-то не могу сообразить

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

Ошибка молотка. Опиши конечную задачу.

Ответы:

как заменить этот привязанный id на значение указанное в поле acf

Наверно, поменять 88 на get_field('promo_taxonomy_id').

Нужно решить такую задачу?

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

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

Не привязывайтесь к жёсткому ID рубрики в коде. Если в ACF на странице редактирования промо-блока выбирается рубрика, получите выбранный термин из поля и проверяйте текущую запись через has_category() или has_term().

Если поле ACF возвращает ID термина:

$category_id = (int) get_field('promo_category', $promo_id);
 
if ($category_id && has_category($category_id, get_the_ID())) {
    // вывести промо-блок
}

$category_id = (int) get_field('promo_category', $promo_id); if ($category_id && has_category($category_id, get_the_ID())) { // вывести промо-блок }

Если поле возвращает объект термина:

$term = get_field('promo_category', $promo_id);
 
if ($term && has_category((int) $term->term_id, get_the_ID())) {
    // вывести промо-блок
}

$term = get_field('promo_category', $promo_id); if ($term && has_category((int) $term->term_id, get_the_ID())) { // вывести промо-блок }

Если это не стандартные рубрики, а кастомная таксономия, используйте has_term():

$term = get_field('promo_term', $promo_id);
 
if ($term && has_term((int) $term->term_id, 'your_taxonomy', get_the_ID())) {
    // вывести блок
}

$term = get_field('promo_term', $promo_id); if ($term && has_term((int) $term->term_id, 'your_taxonomy', get_the_ID())) { // вывести блок }

В настройках ACF для поля выбора рубрики лучше использовать тип Taxonomy. В Return Format выберите Term Object или Term ID и дальше пишите код под выбранный формат.

Если промо-блоков несколько, можно сделать запрос всех опубликованных promo и для каждого проверить выбранную рубрику. Но следите за производительностью: не делайте тяжёлый запрос в каждом месте шаблона без кэша.

И ещё: если блок должен показываться для нескольких рубрик, настройте ACF Taxonomy field с multiple select. Тогда проверка будет проходить по массиву ID. Это гибче, чем одно поле и жёсткий ID в PHP.

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

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

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

комментарий

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

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