複数の投稿タイプと同じ関係を持つクエリを単一のページに表示する


8

クライアントがプロジェクトを維持し、Wordpressにフィードバックを残すことができるクライアントポータルを作成しています。「クライアント」と「プロジェクト」という2つのカスタム投稿タイプがあり、それぞれがバックエンドで相互に情報を取得します。クライアントを作成すると、プロジェクトの投稿タイプのドロップダウンメニューに自動的にpostIDが生成され、クライアントをプロジェクトに割り当てることができます。

私が達成しようとしているのは、選択したクライアントに関連付けられているすべてのプロジェクトをフロントエンドの単一のページに表示することです。単一のページはクライアントポータルであり、クライアントの投稿タイプによって生成されます。

関連する投稿を表示できないようです。single.phpこれがクライアントポータルでプロジェクトを表示する私のコードです。

 <?php 
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      $loop = new WP_Query( array(
         'post_type'      => array( 'projects'),
         'posts_per_page' => -1,
         'paged'          => $paged,
         'meta_query' => array(
              array(
                 'key'     => 'a_client', // name of custom field
                 'value'   => '"' . get_the_ID() . '"', 
                 'compare' => 'LIKE'
             )
          )                 
     )); 
 ?> 

以下は、プロジェクトの管理パネルでクライアントをプロジェクトに割り当てるために使用しているコードです。このスクリプトは、クライアントページで作成したクライアントを表示し、その名前をドロップダウンメニューに表示します。

 add_action( 'add_meta_boxes', 'add_clients_custom_metabox' );
    function add_clients_custom_metabox() {
 add_meta_box( 'custom-metabox', __( 'Clients' ), 'clients_custom_metabox', 'projects', 'side', 'high' );
 }

 function clients_custom_metabox($post) {
     global $post,$current_user;
     //remember the current $post object
        $real_post = $post;
     //get curent user info (we need the ID)
       get_currentuserinfo();
     //create nonce
       echo '<input type="hidden" name="clients_meta_box_nonce" value="',       wp_create_nonce(basename(__FILE__)), '" />';
     //get saved meta
       $selected = get_post_meta( $post->ID, 'a_clients', true );
    //create a query for all of the user clients posts
       $clients_query = new WP_Query();
       $clients_query->query(array(
           'post_type'      => 'client_portal',
           'posts_per_page' => -1,
           'author'         => $current_user->ID));
    if ($clients_query->have_posts()){
          echo '<select name="a_clients" id="a_clients">';
      //loop over all post and add them to the select dropdown
          echo '<option>Assign a client</option>';
          while ($clients_query->have_posts()){
     $clients_query->the_post();
          echo '<option value="'.$post->ID.'" ';
                if ( $post->ID == $selected){
          echo 'selected="selected"';
               }
          echo '>'.$post->post_title .'</option>';
               }
          echo '<select>';
               }
     //reset the query and the $post to its real value
        wp_reset_query();
        $post = $real_post;
             }
    //hook to save the post meta
          add_action( 'save_post', 'save_clients_custom_metabox' );
    // Process the custom metabox fields
        function save_clients_custom_metabox( $post_id ) {
            global $post;
   // verify nonce
    if (!wp_verify_nonce($_POST['clients_meta_box_nonce'], basename(__FILE__))) {
        return $post_id;
   }
  // check autosave
     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
     return $post_id;
  }
 // check permissions
 if ('events' == $_POST['post_type']) {
 if (!current_user_can('edit_page', $post_id)) {
return $post_id;
 }
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
 }
if( $_POST ) {
 $old = get_post_meta($post_id, 'a_clients', true);
 $new = $_POST['a_clients'];
if ($new && $new != $old){
 update_post_meta($post_id, 'a_clients', $new);
}
 }
  }

single.php http://pastebin.com/na7djwsqの完全なコード

投稿タイプの登録プロジェクトの投稿タイプは=> プロジェクトと呼ばれます クライアントの投稿タイプは=> client_portalと呼ばれます


なぜにpaged設定されてい$client_IDますか?また、posts_per_pageすべての投稿を返すように設定しています。
ミロ

元々は$ client_IDを$ pagedとして持っていましたが、私が実行しているシナリオでは何も表示されていないようです。@Milo
bigant841

元々はスタックオーバーフローの質問- チャットルーム
Howdy_McGee

それは次のようになりんclientでなければなりませんa_client:それはこのようになりますように@ bigant841は、配列としてメタを保存している[a_clients] => Array ([0] => 91)
Howdy_McGee

投稿タイプに複数の名前を付けるのは珍しいことです。正しいスラッグは確かprojectsですか?違いprojectますか?
tao

回答:


1

投稿メタをに設定してa_clientsいますが、クエリはを探していa_clientます。

update_post_meta($post_id, 'a_clients', $new);

'key' => 'a_client'

それらは同じである必要があります。クエリを更新すると、投稿を更新する必要がkeyなくなるため、meta_queryのをに更新することをお勧めしa_clientsます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.