Задать вопрос
cashloveyou
@cashloveyou
Хороший чел

Как вывести записи паралельные id?

При добавлении обычного типа записи (продукт) мы выбираем к каким отраслям он относится ( другой тип записи) выборка идет с помощью плагина acf pro в итоге получаем id через array
например : 27 , 12, 33
в итоге в продукте получаем эти отрасли и выводим
возможно ли вывести также внутри этих записей (отраслей) Продукт в котором была выбранна отрасль
Например : Новый продукт c id 22 - При добавлении указываю отрасли с id 12 , 33
в продукте с id 22 показываются записи отраслей с id 12 , 33 теперь нужно записях id 12 , 33 вывести запись продукта с id 22
  • Вопрос задан
  • 49 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@iru
php dev
Нужна таблица связей продукта и отраслей, и вместе с товаром дергать все связанные
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Можно сделать двухстороннюю связь с помощью дополнительного поля. При сохранении записи 22 (продукт), брать список ID связанных отраслей и каждой из них дописывать в мета что-то типа connected_products => [22,]. Обратите внимание, что ID должны идти в массиве или через запятую - это позволит вам привязывать несколько продуктов к одной отрасли (и не забудьте перед установкой нового ID сначала получить старое значение, если таковое имеется, чтобы не затирать существующие привязки).

Псевдокод (пишу не проверяя, чтобы продемонстрировать логику):

add_action( 'save_post',  'connect_products_to_industries' );
function connect_products_to_industries( $post_id, $post, $update ) 
{
    if ( ! empty( $_POST['acf_field_insdustries'] ) ) { // Если отраслей есть, название поля от балды
        // предположим, что отрасли будут массивом ID, пройдемся по нему:
        foreach ( $_POST['acf_field_insdustries'] as $industry_id ) {
            // Получаем текущий список связанных продуктов
            $products_in_industry = get_post_meta( $industry_id, 'connected_products', true );
            // Надо будет проверить, не пустое ли значение (empty string если привязок еще нет, а нам массив нужен), это опущу, сами сделаете
            // Дополним список IDшкой текущего продукта, если его еще нет в этом списке.
            if ( ! in_array( $post_id, $products_in_industry ) ) {
                $products_in_industry[] = $post_id;
                // И запишем это обратно в отрасль
                update_post_meta( $industry_id, 'connected_products', $products_in_industry );
            }
        }
    }
}

Если вам надо будет выборки делать (Meta_Query) по $products_in_industry, сохраняйте IDшки продуктов отдельными мета-записями (bool $single должен быть false). Тогда с массивами и склейкой с предыдущими данными заморачиваться не надо будет, можно получать массив этих записей и работать с ним подобным образом.

Для вывода продуктов на странице отрасли достаточно запустить get_posts/WP_Query передав туда через post__in массив IDшек из meta (connected_products).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы