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.php
lequel 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
client
devrait être a_client
et @ bigant841 enregistre la méta en tant que tableau, il ressemble donc à ceci:[a_clients] => Array ([0] => 91)
projects
? Non project
?
paged
réglé sur$client_ID
? vous définissez égalementposts_per_page
de renvoyer tous les messages.