Как привязать произвольное поле даты ACF к выбранным записям?
У меня есть адреса офисов в виде записей прозивольного типа в ACF.
Адреса привязаны к рубрикам по линиям метро (красная, синяя, зеленая, оранжевая, фиолетовая).
Ну и собственно есть сами офисы у которых есть дата начала обучения и другая информация.
Мне необходимо указывать дату и другую информацию к офису...и чтобы дата применялась к записям (адресам) и выводилась на главной.
Самый простой способ, это создать произвольное поле с датой и открывая каждую запись выставлять дату...вывести в WP_Query вызов произвольного поля через:
<?php the_field('start-date', $post->ID); ?>
и к каждому адресу будет показываться дата.
В моем случае дата обновляется рандомно каждый месяц у каждого офиса...соответственно мне каждый месяц надо будет редактировать даты у каждой записи (адреса) привязанной к определенному офису.
Пытался придумать вариант с произвольными опциями, так как они по задумке самые удобные...можно вывести их в админке и будет сразу показываться список из всех 5 офисов, где можно обновлять даты и они бы логически обновлялись на нужных постах страницах...но я не нашел как можно значение произвольных опций ACF привязать к выбранным записям (адресам).
Была идея выводить название/описание рубрики и например сделать рубрику "Офис 1", привязать запись (адрес) к этой рубрике и выводить ее название/описание под видом даты, но как это сделать я так и не понял.
Так же пытался создать произвольное поле для рубрики/таксономии, но они как я понял работают только на страницах рубрик/таксономий и др.
Подскажите пожалуйста в кратце идеи как можно облегчить себе жизнь, чтобы обновлять произвольное поле даты и оно было привязано к выбранным мною записям (адресам) и дата выводилась только у того адреса, к которому оно привязано.
Заранее спасибо, к сожалению мои знания не позволяют реализовать это собственными силами.
Код для вывода адресов на главной у меня такой:
<?php $args = array( 'post_type' => 'office', 'posts_per_page' => 99, 'tax_query' => array( array( 'taxonomy' => 'metro', 'field' => 'id', 'terms' => 26 ) ) ); $terms = new WP_Query($args); ?> <?php if ($terms->have_posts()) : while ($terms->have_posts()) : $terms->the_post(); ?> <div class="office-list maskh background-<?php the_field('metro_color', $post->ID); ?>">м. <?php the_field('metro_station', $post->ID); ?> <div> <?php endwhile; else: echo '<span class="no-office">Пока нет филиалов</span>'; endif; ?> <?php wp_reset_query(); ?> |
<?php $args = array( 'post_type' => 'office', 'posts_per_page' => 99, 'tax_query' => array( array( 'taxonomy' => 'metro', 'field' => 'id', 'terms' => 26 ) ) ); $terms = new WP_Query($args); ?> <?php if ($terms->have_posts()) : while ($terms->have_posts()) : $terms->the_post(); ?> <div class="office-list maskh background-<?php the_field('metro_color', $post->ID); ?>">м. <?php the_field('metro_station', $post->ID); ?> <div> <?php endwhile; else: echo '<span class="no-office">Пока нет филиалов</span>'; endif; ?> <?php wp_reset_query(); ?>
Дополнительные вопросы
Попробуйте переформулировать вопрос, а то из вашего описания я так и не понял, какая именно проблема и в чем трудность
Я создал произвольное поле даты ACF, оно отображается в 3 записях по рубрике. Мне надо сделать так, чтобы значение даты менялось сразу в 3 записях и не приходилось каждую запись открывать и редактировать поле даты отдельно...
вместе с этим, мне надо публиковать эти адреса списком на главной странице через WP_Query, указанный выше...соответственно, чтобы я мог указать это внутри wp_query
<?php the_field('data_starta', $post->ID); ?>
И wp сам генерировал список с названиями и датами.
В данный момент, я могу это все сделать, но придется редактировать в каждом посте дату, а это занимает много времени, учитывая, что их будет еще больше.
Как сделать чтобы все это работало и не приходилось обновлять дату в каждом посте...
Про варианты решения уже писал выше.
add_action('save_post_adres', 'my_update_post_date'); // save_post_adres <b>adres</b> это post_type function my_update_post_date($post_id) { нужный цикл (тот же wp_query или get_posts) с выборкой постов которые нужно обновить, можете выбрать все посты, или например взять посты той категории к которой относится данный пост функция обновления ACF поля update_field($selector, $value, [$post_id]); } |
add_action('save_post_adres', 'my_update_post_date'); // save_post_adres <b>adres</b> это post_type function my_update_post_date($post_id) { нужный цикл (тот же wp_query или get_posts) с выборкой постов которые нужно обновить, можете выбрать все посты, или например взять посты той категории к которой относится данный пост функция обновления ACF поля update_field($selector, $value, [$post_id]); }
Ответы на вопрос 0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если у вас есть офисы как записи произвольного типа и нужно задавать даты/информацию для выбранных офисов, лучше не дублировать эти данные в каждом офисе вручную. Нормальная структура зависит от того, что является главным объектом: офис, курс/поток или линия метро.
Если дата относится к конкретному офису, добавьте ACF-поля прямо к CPT «Офис»: дата начала, время, цена, ссылка, статус. Тогда на главной вы просто запрашиваете офисы с заполненной датой.
Если одна дата должна применяться сразу к нескольким офисам, лучше создать отдельный CPT, например «Поток обучения» или «Расписание», и в нём поле Relationship к офисам:
Тогда один поток может быть связан с несколькими офисами, а офисы остаются чистыми адресами.
Вывод связей ACF:
$offices = get_field('offices'); if ($offices) { foreach ($offices as $office) { echo esc_html(get_the_title($office)); } }
Для главной можно запросить ближайшие потоки:
$query = new WP_Query([ 'post_type' => 'schedule', 'meta_key' => 'start_date', 'orderby' => 'meta_value', 'order' => 'ASC', ]);
Если сделать просто repeater на главной, будет быстро, но плохо поддерживается: данные живут в одном месте и не связаны с офисами. Для небольшой задачи это допустимо, но если офисов/дат станет много, лучше CPT + relationship.