Ich erstelle ein Kundenportal, in dem meine Kunden ihre Projekte pflegen und Feedback in Wordpress hinterlassen können. Ich habe zwei benutzerdefinierte Beitragstypen mit den Namen "Clients" und "Projekte", die im Backend jeweils Informationen voneinander abrufen. Wenn ich einen Client erstelle, generiert er automatisch seine Post-ID in einem Dropdown-Menü des Post-Typs des Projekts, in dem ich einem Projekt einen Client zuweisen kann.
Ich versuche, alle Projekte, die dem ausgewählten Client zugeordnet sind, auf einer einzigen Seite im Frontend anzuzeigen. Die einzelne Seite ist das Kundenportal, das vom Kundenposttyp generiert wird.
Ich kann den zugehörigen Beitrag nicht anzeigen. Hier ist mein Code, für single.php
den die Projekte auf dem Kundenportal angezeigt werden.
<?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 einem Projekt im Admin-Bereich von Projekten einen Client 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
Post-Typ registrieren Ich verwende den Projekt-Post-Typ heißt => Projekte Der Client-Post-Typ heißt => client_portal
client
sein sollte a_client
und @ bigant841 speichert das Meta als Array, also sieht es so aus:[a_clients] => Array ([0] => 91)
projects
? Nicht project
?
paged
eingestellt auf$client_ID
? Sie können auchposts_per_page
alle Beiträge zurückgeben.