web-dev-qa-db-de.com

Anzeigen einer Abfrage mit mehreren Beitragstypen und derselben Beziehung auf einer einzelnen Seite

Ich erstelle ein Kundenportal, in dem meine Kunden ihre Projekte verwalten und in Wordpress Feedback hinterlassen können. Ich habe zwei benutzerdefinierte Post-Typen namens "Clients" und "Projects", die im Backend jeweils Informationen voneinander beziehen. Wenn ich einen Kunden erstelle, generiert er automatisch seine postID in einem Dropdown-Menü des Projektposttyps, in dem ich einem Projekt einen Kunden zuweisen kann.

Ich versuche, alle Projekte, die dem ausgewählten Client zugeordnet sind, auf einer einzelnen Seite im Front-End anzuzeigen. Die einzelne Seite ist das Kundenportal, das vom Typ des Kundenposts generiert wird.

Ich kann den zugehörigen Beitrag nicht anzeigen. Hier ist mein Code für single.php, der die Projekte auf dem Kundenportal anzeigt.

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

Unten ist der Code, den ich verwende, um einen Client einem Projekt im Admin-Bereich von Projekten zuzuweisen. Dieses Skript zeigt alle Clients an, die ich auf der Client-Seite erstellt habe, und zeigt deren Namen in einem Dropdown-Menü an.

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

Vollständiger Code für single.php http://Pastebin.com/na7djwsq

Registrieren Beitragstyp Ich verwende Projekt Beitragstyp heißt => projects Kunden Beitragstyp heißt => client_portal

8
bigant841

Sie legen das Post-Meta als a_clients fest, die Abfrage sucht jedoch nach a_client.

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

'key' => 'a_client'

Die müssen gleich sein. Da das Aktualisieren der Abfrage bedeutet, dass Sie die Beiträge nicht erneut aktualisieren müssen, empfehle ich, die key der meta_query auf a_clients zu aktualisieren.

1
Jacob Peattie