Отношения "один ко многим", отображаемые по категориям (с помощью плагина "Сообщения к сообщениям")
Срочно нужна помощь. Пожалуйста, при необходимости направьте меня на соответствующий форум, но мне очень нужно решить эту проблему.
Я создаю сайт управления недвижимостью, в котором основные функции должны работать следующим образом:
- Пользователь входит в систему и видит здания/объекты, находящиеся под их управлением.
- Пользователь нажимает на здание и видит категории предметов обслуживания/ремонта (электричество, канализация, Интернет и т.д.).
- Пользователь выбирает категорию и видит уникальные сервисные товары в этой категории для данного конкретного здания (где находится кабельная коробка, где находится выключатель и т. Д.).
Моя проблема в том, что в настоящее время я получаю сервисные товары для всех зданий, а не только для того, которым управляют. Текущий поток идет со страницы "Здания", на которой показаны все доступные сообщения о зданиях (которые я настроил с помощью файла template-buildings.php ) на одну страницу для пользовательского типа записи "здания", на которой отображается список категорий (обрабатываемых по single-buildings.php) к category.php страница для отображения всех сервисных товаров в выбранной категории на single.php страница, на которой отображается отдельный элемент.
Мой большой срыв, похоже, продолжается category.php . Я пытаюсь отобразить ТОЛЬКО элементы в категории, которые имеют отношение к ранее выбранному сообщению о здании. Я пытаюсь использовать плагин сообщения к сообщениям, чтобы включить это. Вот код на данный момент.
<?php
// Get category id of current page
$catid = get_queried_object_id();
// Find connected posts
$wp_query = new WP_Query( array(
'post_type' => 'buildings'
) );
p2p_type( 'buildings_to_si' )->each_connected( $wp_query, array( 'cat' => $catid ), 'service_items' );
// Display connected posts
while ( $wp_query->have_posts() ) : $wp_query->the_post();
foreach ( $post->service_items as $post ) : setup_postdata( $post );
?>
<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center">
<a class="btn btn-elegant" href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</div>
<?php endforeach; ?>
<?php endwhile; ?>
На данный момент я получаю все сообщения в категории для всех зданий, независимо от отношений, установленных плагином. Я знаю, что это связано с тем фактом, что я пытаюсь сделать это на странице архива категорий, но я действительно не знаю, что еще можно сделать на данный момент. Я готов пойти совершенно другим путем, если это необходимо. Будет обновляться для уточнения, если это необходимо. Спасибо!
Редактировать: Для потомков
Поэтому я заставил его работать, основываясь на комментарии кученундкакао. Я добавил этот код в single-buildings.php файл это добавляет идентификатор публикации к адресу ссылки категории (обновленный код выделен жирным шрифтом)
<?php
$args = array(
'hide_empty' => true,
'orderby' => 'name',
'order' => 'ASC',
'parent' => 0,
'posts_per_page' => -1
);
$categories = get_categories($args);
foreach($categories as $category) {
// Get the ID of a given category
$category_id = get_cat_ID( $category->name );
// Get the URL of this category
$category_link = get_category_link( $category_id );
/////////// Added bit of code /////////////////
$category_link .= "?building_id=".get_the_ID();
echo '<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center"><a class="btn btn-lg btn-elegant" href="' . $category_link.'" role="button">' .
$category->name.'</a></div>';
?>
Затем на category.php Я добавил пару переменных, чтобы получить этот идентификатор. Вот обновленный код, основанный на этом.
<?php
// Get category id of current page
$catid = get_queried_object_id();
////////// Added code ////////////////
$buildingid = $_GET['building_id'];
// Find connected posts
$wp_query = new WP_Query( array(
'post_type' => 'buildings',
////////// Added code ////////////////
'p' => $buildingid
) );
p2p_type( 'buildings_to_si' )->each_connected( $wp_query, array( 'cat' => $catid ), 'service_items' );
// Display connected posts
while ( $wp_query->have_posts() ) : $wp_query->the_post();
foreach ( $post->service_items as $post ) : setup_postdata( $post );
?>
<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center">
<a class="btn btn-elegant" href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</div>
<?php endforeach; ?>
<?php endwhile; ?>
Это устранило проблему и позволило мне продолжать использовать страницу категории по назначению. Это добавляет немного беспорядка в мои URL-адреса, но это частный сайт для компании, так что это не будет проблемой.
1 answers
Я не очень хорошо знаком с плагином "сообщения к сообщениям", но ваша основная проблема может заключаться в том, что страница категории не знает, какое здание вы выбрали на предыдущем шаге, если вы не передадите его в параметре или не сохраните его в сеансе или файле cookie. Может быть, было бы лучше вывести подключенные элементы на странице зданий, например:
Building (description etc)
- category 1
-item 1
- category 2
-item 2
-item 3
...