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


8

Je crée un portail client où mes clients peuvent maintenir leurs projets et laisser des commentaires dans Wordpress. J'ai deux types de messages personnalisés appelés "Clients" et "Projets" et ils tirent chacun des informations l'un de l'autre dans le backend. Lorsque je crée un client, il génère automatiquement son postID dans un menu déroulant sur le type de publication des projets où je peux affecter un client à un projet.

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

Je n'arrive pas à afficher le message associé. Voici mon code pour single.phplequel affichera les projets sur le portail 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 des 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 J'utilise le type de publication du projet est appelé => projets Le type de publication des clients est appelé => client_portal


pourquoi est pagedréglé sur $client_ID? vous définissez également posts_per_pagede renvoyer tous les messages.
Milo

à l'origine j'avais $ client_ID comme $ paginé mais rien ne semblait s'afficher avec n'importe quel scénario que je faisais. @Milo
bigant841

A l'origine une question de débordement de pile - n'hésitez pas à nous rejoindre dans le chat
Howdy_McGee

Il semble que cela clientdevrait être a_clientet @ bigant841 enregistre la méta en tant que tableau, il ressemble donc à ceci:[a_clients] => Array ([0] => 91)
Howdy_McGee

Nommer un type de message au pluriel est inhabituel. Êtes-vous sûr que le bon limace est projects? Non project?
tao

Réponses:


1

Vous définissez la méta post comme a_clients, mais la requête est à la recherche a_client.

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

'key' => 'a_client'

Celles-ci doivent être les mêmes. Étant donné que la mise à jour de la requête signifie que vous n'aurez pas à recommencer la mise à jour des messages, je suggère de mettre à jour keyla méta_query vers a_clients.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.