Tampilkan kueri dengan beberapa jenis posting dan hubungan yang sama pada satu halaman

8

Saya membuat portal klien jika klien saya dapat mempertahankan proyek mereka dan meninggalkan umpan balik di Wordpress. Saya memiliki dua jenis pos kustom yang disebut "Klien" dan "Proyek" dan mereka masing-masing menarik informasi dari satu sama lain di backend. Ketika saya membuat klien, ia secara otomatis menghasilkan postID-nya ke menu drop down pada jenis posting proyek yang saya dapat menetapkan klien ke proyek.

Apa yang saya coba capai adalah dengan menampilkan semua proyek yang terkait dengan klien yang dipilih pada satu halaman di ujung depan. Halaman tunggal akan menjadi portal klien, yang dihasilkan oleh jenis posting klien.

Sepertinya saya tidak dapat menampilkan pos terkait. Berikut adalah kode saya single.phpyang akan menampilkan proyek-proyek di portal klien.

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

Di bawah ini adalah kode yang saya gunakan untuk menetapkan klien ke proyek di panel admin proyek. Skrip ini menampilkan klien apa pun yang saya buat di halaman klien dan menampilkan nama mereka di menu tarik turun.

 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);
}
 }
  }

Kode lengkap untuk single.php http://pastebin.com/na7djwsq

Daftar Jenis Posting Saya menggunakan jenis posting Proyek disebut => proyek Jenis posting klien disebut => client_portal

bigant841
sumber
mengapa pageddiatur $client_ID? Anda juga mengatur posts_per_pageuntuk mengembalikan semua posting.
Milo
awalnya saya memiliki $ client_ID sebagai $ paged tetapi sepertinya tidak ada yang ditampilkan dengan skenario apa pun yang saya lakukan. @Milo
bigant841
Awalnya Pertanyaan Stack Overflow - jangan ragu untuk bergabung dengan kami di chatroom
Howdy_McGee
Memang terlihat seperti clientseharusnya a_clientdan @ bigant841 menyimpan meta sebagai array, jadi terlihat seperti ini:[a_clients] => Array ([0] => 91)
Howdy_McGee
Memberi nama jenis tulisan dalam bentuk jamak tidak biasa. Apakah Anda yakin siput yang benar projects? Bukan project?
tao

Jawaban:

1

Anda menetapkan meta pos sebagai a_clients, tetapi kueri sedang mencari a_client.

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

'key' => 'a_client'

Itu harus sama. Karena memperbarui kueri berarti Anda tidak perlu memperbarui posting lagi, saya sarankan memperbarui keymeta_query ke a_clients.

Jacob Peattie
sumber