Hiển thị một truy vấn với nhiều loại bài đăng và cùng một mối quan hệ trên một trang


8

Tôi đang tạo một cổng thông tin khách hàng là khách hàng của tôi có thể duy trì các dự án của họ và để lại phản hồi trong Wordpress. Tôi có hai loại bài đăng tùy chỉnh được gọi là "Khách hàng" và "Dự án" và mỗi loại đều lấy thông tin từ nhau trong phần phụ trợ. Khi tôi tạo một ứng dụng khách, nó sẽ tự động tạo postID của nó vào menu thả xuống trên loại bài đăng dự án là tôi có thể gán một ứng dụng khách cho một dự án.

Những gì tôi đang cố gắng thực hiện là bằng cách hiển thị tất cả các dự án được liên kết với ứng dụng khách được chọn trên một trang ở mặt trước. Trang đơn sẽ là cổng thông tin khách, được tạo bởi loại bài đăng của khách hàng.

Tôi dường như không thể hiển thị bài viết liên quan. Đây là mã của tôi single.phpsẽ hiển thị các dự án trên cổng khách hàng.

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

Dưới đây là mã tôi đang sử dụng để gán khách hàng cho một dự án trong bảng quản trị dự án. Kịch bản lệnh này hiển thị bất kỳ ứng dụng khách nào tôi đã tạo trong trang khách hàng và hiển thị tên của họ trong menu thả xuống.

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

Mã đầy đủ cho single.php http://pastebin.com/na7djwsq

Đăng ký Loại bài đăng Tôi đang sử dụng Loại bài đăng dự án được gọi => dự án Loại bài đăng của khách hàng được gọi => client_portal


why is paged set to $client_ID? you're also setting posts_per_page to return all posts.
Milo

originally I had $client_ID as $paged but nothing seemed to be displaying with any scenario I was doing. @Milo
bigant841

Originally a Stack Overflow Question - feel free to join us in chatroom
Howdy_McGee

It does look like client should be a_client and @bigant841 is saving the meta as an array, so it looks like this: [a_clients] => Array ([0] => 91)
Howdy_McGee

Naming a post type in plural is unusual. Are you sure the correct slug is projects? Not project?
tao

Câu trả lời:


1

You're setting the post meta as a_clients, but the query is looking for a_client.

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

'key' => 'a_client'

Those need to be the same. Since updating the query means you won't have to go updating posts again, I suggest updating the key of the meta_query to a_clients.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.