Отношения "один ко многим", отображаемые по категориям (с помощью плагина "Сообщения к сообщениям")


Срочно нужна помощь. Пожалуйста, при необходимости направьте меня на соответствующий форум, но мне очень нужно решить эту проблему.

Я создаю сайт управления недвижимостью, в котором основные функции должны работать следующим образом:

  • Пользователь входит в систему и видит здания/объекты, находящиеся под их управлением.
  • Пользователь нажимает на здание и видит категории предметов обслуживания/ремонта (электричество, канализация, Интернет и т.д.).
  • Пользователь выбирает категорию и видит уникальные сервисные товары в этой категории для данного конкретного здания (где находится кабельная коробка, где находится выключатель и т. Д.).

Моя проблема в том, что в настоящее время я получаю сервисные товары для всех зданий, а не только для того, которым управляют. Текущий поток идет со страницы "Здания", на которой показаны все доступные сообщения о зданиях (которые я настроил с помощью файла 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-адреса, но это частный сайт для компании, так что это не будет проблемой.

Author: KreigD, 2017-09-08

1 answers

Я не очень хорошо знаком с плагином "сообщения к сообщениям", но ваша основная проблема может заключаться в том, что страница категории не знает, какое здание вы выбрали на предыдущем шаге, если вы не передадите его в параметре или не сохраните его в сеансе или файле cookie. Может быть, было бы лучше вывести подключенные элементы на странице зданий, например:

 Building (description etc)
 - category 1
       -item 1
 - category 2
         -item 2
         -item 3
         ...
 1
Author: HU ist Sebastian, 2017-09-08 08:29:49