WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как связать 3 типа записей?

Добрый день
Задача чтобы связать 3 типа записей.
Есть 3 типа записей products, regions, distilleries

Нашел решение здесь на сайте но работает только для связки 2-х типов записей но когда добавляю аналогичный метабок то сохранение работает только в одном из них
https://wp-kama.ru/question/kak-uvyazat-posty-iz-dvuh-proizvolnyh-tipov-zapisej

Мне нужно сделать так чтобы к products можно было выбрать в каких regions и distilleries он может отображаться.
На странице где нужно все это отображать я думаю выведу но не могу понять почему не сохраняется значение в метабоксе regions (точнее в первом не сохранятеся а сохранятся только во втором).

Подскажите где ошибка

add_action('add_meta_boxes', function () {
	add_meta_box( 'regions', 'regions', 'regions_metabox', 'products', 'side', 'low'  );
}, 1);
function regions_metabox( $post ){
	$regions = get_posts(array( 'post_type'=>'regions', 'posts_per_page'=>-1, 'orderby'=>'post_title', 'order'=>'ASC' ));
	if( $regions ){
		echo '
		<div style="max-height:200px; overflow-y:auto;">
			<ul>
		';
		foreach( $regions as $region ){
			echo '
			<li><label>
				<input type="checkbox" name="post_parent" value="'. $region->ID .'" '. checked($region->ID, $post->post_parent, 0) .'> '. esc_html($region->post_title) .'
			</label></li>
			';
		}
		echo '
			</ul>
		</div>';
	}
	else
		echo 'empty';
};

add_action('add_meta_boxes', function () {
	add_meta_box( 'distilleries', 'distilleries', 'distilleries_metabox', 'products', 'side', 'low'  );
}, 1);
function distilleries_metabox( $post ){
	$distilleries = get_posts(array( 'post_type'=>'distilleries', 'posts_per_page'=>-1, 'orderby'=>'post_title', 'order'=>'ASC' ));
	if( $distilleries ){
		echo '
		<div style="max-height:200px; overflow-y:auto;">
			<ul>
		';
		foreach( $distilleries as $distillerie ){
			echo '
			<li><label>
				<input type="checkbox" name="post_parent" value="'. $distillerie->ID .'" '. checked($distillerie->ID, $post->post_parent, 0) .'> '. esc_html($distillerie->post_title) .'
			</label></li>
			';
		}
		echo '
			</ul>
		</div>';
	}
	else
		echo 'empty';
};
1
alexsteel
2.4 года назад 11
  • 0
    stepan2278 www.weblancer.net/users/stepanko/?affili...
    name="post_parent"

    проблема явно в том, потому что вы для двух разных CPT исполь тотже name
    Не мешало бы увидеть функцию сохранения.
    Скиньте код ее также

    Комментировать
  • 0
    stepan2278 www.weblancer.net/users/stepanko/?affili...
    <input type="checkbox" name="regions[]" value="'. $region->ID .'" '. checked($region->ID, $post->post_parent, 0) .'> '. esc_html($region->post_title) .'

    и второй блок

    <input type="checkbox" name="distilleries[]" value="'. $distillerie->ID .'" '. checked($distillerie->ID, $post->post_parent, 0) .'> '. esc_html($distillerie->post_title) .'
    stepan 2.4 года назад

    И при сохранение использ переменные с POST

    $regions = $_POST['regions'];
    $distilleries = $_POST['distilleries'];
    update_post_meta( $post_id, 'regions', $regions );
    update_post_meta( $post_id, 'distilleries', $distilleries );

    Код примитивный, но вы ему красоту добавите уже сами.
    А потом на странице продукта - можно получать регионы и distilleries
    И также на страницах регионов можно получать продукты.

    Я бы использовал ACF для добавл метабоксов. Или пойти можно решением через таксономии. Зависит от того, какие дальнейшие задачи-требования.
    Какая структура на сайте.

    alexsteel 2.4 года назад

    А через ACF как связать?

    Суть такая что на сайте есть три типа постов. Хочу указать в продуктах куда его можно относить. Сайчас сделано через ACF Relationship вывод товаров в distilleries вручну но так как distilleries много проще сделать чтобы в продуктах указать в какой из типов записей его относить.

    stepan 2.4 года назад

    А через ACF как связать?

    я не понимаю вашей заадчи, но вы же код добавл
    и у вас проблема с сохран
    Так вот замените код на ACF блоки, логика такая же как в коде.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация