Saya membuat portal klien jika klien saya dapat mempertahankan proyek mereka dan meninggalkan umpan balik di Wordpress. Saya memiliki dua jenis pos kustom yang disebut "Klien" dan "Proyek" dan mereka masing-masing menarik informasi dari satu sama lain di backend. Ketika saya membuat klien, ia secara otomatis menghasilkan postID-nya ke menu drop down pada jenis posting proyek yang saya dapat menetapkan klien ke proyek.
Apa yang saya coba capai adalah dengan menampilkan semua proyek yang terkait dengan klien yang dipilih pada satu halaman di ujung depan. Halaman tunggal akan menjadi portal klien, yang dihasilkan oleh jenis posting klien.
Sepertinya saya tidak dapat menampilkan pos terkait. Berikut adalah kode saya single.php
yang akan menampilkan proyek-proyek di portal klien.
<?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'
)
)
));
?>
Di bawah ini adalah kode yang saya gunakan untuk menetapkan klien ke proyek di panel admin proyek. Skrip ini menampilkan klien apa pun yang saya buat di halaman klien dan menampilkan nama mereka di menu tarik turun.
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);
}
}
}
Kode lengkap untuk single.php http://pastebin.com/na7djwsq
Daftar Jenis Posting Saya menggunakan jenis posting Proyek disebut => proyek Jenis posting klien disebut => client_portal
client
seharusnya a_client
dan @ bigant841 menyimpan meta sebagai array, jadi terlihat seperti ini:[a_clients] => Array ([0] => 91)
projects
? Bukan project
?
paged
diatur$client_ID
? Anda juga mengaturposts_per_page
untuk mengembalikan semua posting.