web-dev-qa-db-ja.com

カテゴリごとに表示される1対多の投稿関係(投稿間プラグインを使用)

緊急に助けが必要です。必要に応じて適切なフォーラムに案内してください。しかし、これを解決する必要があります。

私は、基本機能が次のように機能しなければならない資産管理サイトを作成しています。

  • ユーザーは自分の管理下で建物/プロパティにログオンして表示します。
  • ユーザーが建物をクリックすると、サービス/修理品目のカテゴリ(電気、下水道、インターネットなど)が表示されます。
  • ユーザはカテゴリを選択し、その特定の建物(ケーブルボックスがある場所、ブレーカボックスがある場所など)のそのカテゴリ内の固有のサービス項目を確認します。

私の問題は、私が管理している建物だけでなく、現在すべての建物のサービス項目を取得していることです。現在の流れは、(私はファイルtemplate-buildings.phpでカスタマイズした)利用可能なすべての建物の投稿を表示するBuildingsというページからカテゴリのリストを表示するカスタムの投稿タイプ 'buildings'の単一ページに行きますsingle-buildings.php)によってcategory.phpページに処理され、選択されたカテゴリ内のすべてのサービス項目が個々の項目が表示されるsingle.phpページに表示されます。

私の大きな内訳はcategory.phpにあるようです。私は以前に選択した建物の投稿と関係があるカテゴリ内のアイテムのみを表示しようとしています。有効にするには posts-to-postsプラグイン を使用します。これまでのコードです。

 <?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; ?>

現在のところ、プラグインで設定された関係に関係なく、すべての建物のカテゴリ内のすべての投稿を取得しています。カテゴリアーカイブページでこれを実行しようとしているという事実と関係があることはわかっていますが、現時点で他に何をすべきかわかりません。私は必要ならば全く別の道を進んで行きます。必要に応じて説明を加えて更新します。ありがとうございます。

編集:子孫のために

それで、私はkuchenundkakaoからのコメントに基づいてそれを働かせました。このコードをsingle-buildings.phpファイルに追加して、投稿IDをカテゴリリンクアドレスに追加します(更新されたコードは太字で表示されています)

<?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に、そのIDを取得するための変数をいくつか追加しました。これに基づいて更新されたコードは次のとおりです。

<?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
KreigD

私はposts-to-postsプラグインについてはそれほど馴染みがありませんが、あなたが主な問題としているのは、カテゴリー・ページで、前のステップで選択した建物を知らせないことです。セッションやクッキーで。次のように、建物のページに関連項目を出力するほうが良いでしょう。

 Building (description etc)
 - category 1
       -item 1
 - category 2
         -item 2
         -item 3
         ...
1
kuchenundkakao