Mostrar una consulta con varios tipos de publicaciones y la misma relación en una sola página


8

Estoy creando un portal de clientes donde mis clientes pueden mantener sus proyectos y dejar comentarios en Wordpress. Tengo dos tipos de publicaciones personalizadas llamadas "Clientes" y "Proyectos" y cada uno extrae información entre sí en el back-end. Cuando creo un cliente, genera automáticamente su postID en un menú desplegable en el tipo de publicación de proyectos donde puedo asignar un cliente a un proyecto.

Lo que estoy tratando de lograr es mostrar todos los proyectos asociados con el cliente seleccionado en una sola página en el front-end. La página única será el portal del cliente, que se genera por el tipo de publicación del cliente.

Parece que no puedo mostrar la publicación asociada. Aquí está mi código para el single.phpcual se mostrarán los proyectos en el portal del cliente.

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

A continuación se muestra el código que estoy usando para asignar un cliente a proyectos en el panel de administración de proyectos. Este script muestra cualquier cliente que creé en la página del cliente y muestra sus nombres en un menú desplegable.

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

Código completo para single.php http://pastebin.com/na7djwsq

Registrar tipo de publicación que estoy usando El tipo de publicación del proyecto se llama => proyectos El tipo de publicación de clientes se llama => client_portal


¿Por qué se pagedestablece en $client_ID? también está configurando posts_per_pagepara devolver todas las publicaciones.
Milo

originalmente tenía $ client_ID como $ paginado pero nada parecía mostrarse con ningún escenario que estaba haciendo. @Milo
bigant841 18/04/14

Originalmente una pregunta de desbordamiento de pila: siéntase libre de unirse a nosotros en la sala
Howdy_McGee

Parece que clientdebería ser a_clienty @ bigant841 está guardando el meta como una matriz, por lo que se ve así:[a_clients] => Array ([0] => 91)
Howdy_McGee

Nombrar un tipo de publicación en plural es inusual. ¿Estás seguro de que es la babosa correcta projects? No project?
tao

Respuestas:


1

Estás configurando la meta meta como a_clients, pero la consulta está buscando a_client.

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

'key' => 'a_client'

Esos deben ser lo mismo. Dado que actualizar la consulta significa que no tendrá que actualizar las publicaciones nuevamente, le sugiero actualizar keyla meta_query a a_clients.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.