web-dev-qa-db-fra.com

Afficher une requête avec plusieurs types de publication et la même relation sur une seule page

Je crée un portail client où mes clients peuvent gérer leurs projets et laisser des commentaires dans Wordpress. J'ai deux types de messages personnalisés appelés "Clients" et "Projets" et chacun tire des informations les uns des autres dans le backend. Lorsque je crée un client, il génère automatiquement son identifiant de poste dans un menu déroulant du type de post de projet où je peux affecter un client à un projet.

Ce que j'essaie d'accomplir est d'afficher tous les projets associés au client sélectionné sur une seule page du front-end. La page unique sera le portail client, qui est généré par le type de publication client.

Je n'arrive pas à afficher le post associé. Voici mon code pour single.php qui affichera les projets sur le portail des clients.

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

Vous trouverez ci-dessous le code que j'utilise pour affecter un client à un projet dans le panneau d'administration de projets. Ce script affiche tous les clients que j'ai créés dans la page client et affiche leurs noms dans un menu déroulant.

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

Code complet pour single.php http://Pastebin.com/na7djwsq

Enregistrer le type de publication que j'utilise Le type de publication de projet est appelé => projets Le type de publication de client est appelé => client_portal

8
bigant841

Vous définissez la méta de publication comme a_clients, mais la requête recherche a_client.

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

'key' => 'a_client'

Ceux doivent être les mêmes. Étant donné que la mise à jour de la requête signifie que vous n'aurez plus à mettre à jour les publications, je suggère de mettre à jour la key de la méta_query à a_clients.

1
Jacob Peattie