Как привязать произвольное поле даты ACF к выбранным записям?

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

У меня есть адреса офисов в виде записей прозивольного типа в ACF.
Адреса привязаны к рубрикам по линиям метро (красная, синяя, зеленая, оранжевая, фиолетовая).
Ну и собственно есть сами офисы у которых есть дата начала обучения и другая информация.

Мне необходимо указывать дату и другую информацию к офису...и чтобы дата применялась к записям (адресам) и выводилась на главной.

Самый простой способ, это создать произвольное поле с датой и открывая каждую запись выставлять дату...вывести в WP_Query вызов произвольного поля через:

<?php the_field('start-date', $post->ID); ?>

и к каждому адресу будет показываться дата.
В моем случае дата обновляется рандомно каждый месяц у каждого офиса...соответственно мне каждый месяц надо будет редактировать даты у каждой записи (адреса) привязанной к определенному офису.

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

Была идея выводить название/описание рубрики и например сделать рубрику "Офис 1", привязать запись (адрес) к этой рубрике и выводить ее название/описание под видом даты, но как это сделать я так и не понял.

Так же пытался создать произвольное поле для рубрики/таксономии, но они как я понял работают только на страницах рубрик/таксономий и др.

Подскажите пожалуйста в кратце идеи как можно облегчить себе жизнь, чтобы обновлять произвольное поле даты и оно было привязано к выбранным мною записям (адресам) и дата выводилась только у того адреса, к которому оно привязано.

Заранее спасибо, к сожалению мои знания не позволяют реализовать это собственными силами.

Код для вывода адресов на главной у меня такой:

&lt;?php 				$args = array( 					'post_type' =&gt; 'office', 					'posts_per_page' =&gt; 99, 					'tax_query' =&gt; array( 						array( 							'taxonomy' =&gt; 'metro', 							'field' =&gt; 'id', 							'terms' =&gt; 26 						) 					) 				); 				$terms = new WP_Query($args); ?&gt; 				&lt;?php if ($terms-&gt;have_posts()) : while ($terms-&gt;have_posts()) : $terms-&gt;the_post(); ?&gt; &lt;div class="office-list maskh background-&lt;?php the_field('metro_color', $post-&gt;ID); ?&gt;"&gt;м. &lt;?php the_field('metro_station', $post-&gt;ID); ?&gt; &lt;div&gt; 								&lt;?php endwhile; 				else: echo '&lt;span class="no-office"&gt;Пока нет филиалов&lt;/span&gt;'; endif; ?&gt; 				&lt;?php wp_reset_query(); ?&gt;

&lt;?php $args = array( 'post_type' =&gt; 'office', 'posts_per_page' =&gt; 99, 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'metro', 'field' =&gt; 'id', 'terms' =&gt; 26 ) ) ); $terms = new WP_Query($args); ?&gt; &lt;?php if ($terms-&gt;have_posts()) : while ($terms-&gt;have_posts()) : $terms-&gt;the_post(); ?&gt; &lt;div class="office-list maskh background-&lt;?php the_field('metro_color', $post-&gt;ID); ?&gt;"&gt;м. &lt;?php the_field('metro_station', $post-&gt;ID); ?&gt; &lt;div&gt; &lt;?php endwhile; else: echo '&lt;span class="no-office"&gt;Пока нет филиалов&lt;/span&gt;'; endif; ?&gt; &lt;?php wp_reset_query(); ?&gt;

Дополнительные вопросы

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

  • KingAnton, Куда проще то...
    Я создал произвольное поле даты ACF, оно отображается в 3 записях по рубрике. Мне надо сделать так, чтобы значение даты менялось сразу в 3 записях и не приходилось каждую запись открывать и редактировать поле даты отдельно...

    вместе с этим, мне надо публиковать эти адреса списком на главной странице через WP_Query, указанный выше...соответственно, чтобы я мог указать это внутри wp_query

    <?php the_field('data_starta', $post->ID); ?>

    И wp сам генерировал список с названиями и датами.

    В данный момент, я могу это все сделать, но придется редактировать в каждом посте дату, а это занимает много времени, учитывая, что их будет еще больше.

    Как сделать чтобы все это работало и не приходилось обновлять дату в каждом посте...
    Про варианты решения уже писал выше.

  • Если это можно сделать через ACF (произвольные опции) то было бы максимально удобно, так как их можно вынести на админ панель и редактировать все нужные поля в одном месте. Но как привязать произвольные опции к записям я не понял, не хватает знаний и понимания.
  • by_mak, посмотрите в сторону хука save_post. Вы можете поменять значение в одном посте и при сохранении обновить значения во всех остальных записях.
    add_action('save_post_adres', 'my_update_post_date'); // save_post_adres &lt;b&gt;adres&lt;/b&gt; это 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 &lt;b&gt;adres&lt;/b&gt; это post_type function my_update_post_date($post_id) { нужный цикл (тот же wp_query или get_posts) с выборкой постов которые нужно обновить, можете выбрать все посты, или например взять посты той категории к которой относится данный пост функция обновления ACF поля update_field($selector, $value, [$post_id]); }

  • Ответы на вопрос 0

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

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

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Если у вас есть офисы как записи произвольного типа и нужно задавать даты/информацию для выбранных офисов, лучше не дублировать эти данные в каждом офисе вручную. Нормальная структура зависит от того, что является главным объектом: офис, курс/поток или линия метро.

    Если дата относится к конкретному офису, добавьте ACF-поля прямо к CPT «Офис»: дата начала, время, цена, ссылка, статус. Тогда на главной вы просто запрашиваете офисы с заполненной датой.

    Если одна дата должна применяться сразу к нескольким офисам, лучше создать отдельный CPT, например «Поток обучения» или «Расписание», и в нём поле Relationship к офисам:

    • Дата начала;
    • Описание;
    • Выбранные офисы;
    • Направление/курс;
    • Статус.

    Тогда один поток может быть связан с несколькими офисами, а офисы остаются чистыми адресами.

    Вывод связей ACF:

    $offices = get_field('offices');
     
    if ($offices) {
        foreach ($offices as $office) {
            echo esc_html(get_the_title($office));
        }
    }

    $offices = get_field('offices'); if ($offices) { foreach ($offices as $office) { echo esc_html(get_the_title($office)); } }

    Для главной можно запросить ближайшие потоки:

    $query = new WP_Query([
        'post_type' =&gt; 'schedule',
        'meta_key'  =&gt; 'start_date',
        'orderby'   =&gt; 'meta_value',
        'order'     =&gt; 'ASC',
    ]);

    $query = new WP_Query([ 'post_type' =&gt; 'schedule', 'meta_key' =&gt; 'start_date', 'orderby' =&gt; 'meta_value', 'order' =&gt; 'ASC', ]);

    Если сделать просто repeater на главной, будет быстро, но плохо поддерживается: данные живут в одном месте и не связаны с офисами. Для небольшой задачи это допустимо, но если офисов/дат станет много, лучше CPT + relationship.

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

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

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

    комментарий

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

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