Dengan asumsi saya mengerti pertanyaan, apa yang perlu Anda lakukan adalah menghubungkan ke dua kait yang terkait dengan header kolom dan nilai kolom untuk halaman kelola admin. Mereka 'manage_{$type}_columns'
dan 'manage_{$type}_custom_column'
di mana digunakan-kasus Anda {$type}
adalah users
.
The 'manage_users_columns'
kail
Yang pertama ini sederhana, memungkinkan Anda menentukan header kolom dan karenanya kolom yang tersedia. WordPress hardcodes nilai dari kolom "Posting" jadi karena Anda ingin mengubahnya, kami hanya akan menghapusnya dengan unset()
dan kemudian menambahkan kolom baru dengan judul yang sama tetapi yang sebaliknya memiliki pengidentifikasi 'custom_posts'
:
add_action('manage_users_columns','yoursite_manage_users_columns');
function yoursite_manage_users_columns($column_headers) {
unset($column_headers['posts']);
$column_headers['custom_posts'] = 'Posts';
return $column_headers;
}
The 'manage_users_custom_column'
kail
Selanjutnya Anda perlu menggunakan 'manage_users_custom_column'
hook yang hanya dipanggil untuk kolom non-standar. Kami menguji untuk $column_name=='custom_posts'
membuat kode kami kuat jika kami menambahkan kolom pengguna baru di masa depan dan kemudian kami mengambil jumlah jenis posting pengguna dari fungsi yang saya tulis _yoursite_get_author_post_type_counts()
yang akan saya bahas selanjutnya. Saya kemudian bermain dengan beberapa cara untuk memformat ini tetapi memutuskan HTML <table>
yang paling tepat (karena ini adalah tabel data) . Jika sebuah tabel tidak bekerja untuk Anda, saya berasumsi Anda akan dapat membuat markup yang berbeda dengan mudah:
add_action('manage_users_custom_column','yoursite_manage_users_custom_column',10,3);
function yoursite_manage_users_custom_column($custom_column,$column_name,$user_id) {
if ($column_name=='custom_posts') {
$counts = _yoursite_get_author_post_type_counts();
$custom_column = array();
if (isset($counts[$user_id]) && is_array($counts[$user_id]))
foreach($counts[$user_id] as $count)
$custom_column[] = "\t<tr><th>{$count['label']}</th>" .
"<td>{$count['count']}</td></tr>";
$custom_column = implode("\n",$custom_column);
}
if (empty($custom_column))
$custom_column = "No Posts!";
else
$custom_column = "<table>\n{$custom_column}\n</table>";
return $custom_column;
}
Mendapatkan Hitungan Jumlah menurut Jenis Posting untuk Setiap Pengguna / Penulis
Terakhir ada pengambilan jumlah posting berdasarkan jenis posting oleh penulis / pengguna. Secara umum saya mencoba untuk tetap menggunakan WP_Query()
ketika menjalankan kueri pada posting tetapi permintaan ini akan diperlukan menggunakan begitu banyak kait lain hanya tampak lebih mudah untuk menjadi "nakal" dan melakukan semuanya dalam satu.
Saya dihilangkan setiap jabatan $post->post_type
yaitu 'revision'
atau 'nav_menu_item'
tapi yang tersisa di 'attachments'
. Anda mungkin merasa lebih baik untuk secara eksplisit memasukkan jenis posting yang Anda inginkan daripada mengecualikan beberapa yang saya lakukan.
Saya juga difilter $post->post_status
hanya untuk 'publish'
dan 'pending'
. Jika Anda ingin juga menyertakan 'future'
, 'private'
dan / atau 'draft'
Anda perlu melakukan perubahan dalam kode.
Untuk setiap pemuatan halaman, saya hanya memanggil _yoursite_get_author_post_type_counts()
fungsi ini sekali dan kemudian menyimpannya ke dalam variabel statis alih-alih panggilan untuk setiap pengguna. Saya menyimpan dalam larik yang diindeks oleh ID pengguna / pengguna yang berisi larik dengan nama Jenis Tulisan dalam elemen 'label'
dan tentu saja hitungan dalam elemen dengan nama yang sama:
function _yoursite_get_author_post_type_counts() {
static $counts;
if (!isset($counts)) {
global $wpdb;
global $wp_post_types;
$sql = <<<SQL
SELECT
post_type,
post_author,
COUNT(*) AS post_count
FROM
{$wpdb->posts}
WHERE 1=1
AND post_type NOT IN ('revision','nav_menu_item')
AND post_status IN ('publish','pending')
GROUP BY
post_type,
post_author
SQL;
$posts = $wpdb->get_results($sql);
foreach($posts as $post) {
$post_type_object = $wp_post_types[$post_type = $post->post_type];
if (!empty($post_type_object->label))
$label = $post_type_object->label;
else if (!empty($post_type_object->labels->name))
$label = $post_type_object->labels->name;
else
$label = ucfirst(str_replace(array('-','_'),' ',$post_type));
if (!isset($counts[$post_author = $post->post_author]))
$counts[$post_author] = array();
$counts[$post_author][] = array(
'label' => $label,
'count' => $post->post_count,
);
}
}
return $counts;
}
UI yang dihasilkan
Dan inilah yang tampaknya diterapkan pada instalasi pengujian WordPress 3.0.1 saya:
(sumber: mikeschinkel.com )
Unduh Kode Lengkap
Anda dapat mengunduh kode lengkap dari Gist :
Anda dapat menyalin kode ini ke functions.php
file tema Anda atau menyimpan memasukkan file dalam plugin, mana pun yang Anda pilih.
Semoga ini membantu!