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!
Berikut ini adalah variasi pada jawaban sorich87, karena saya tidak bisa membuatnya bekerja, dan saya ingin mendukung beberapa jenis secara otomatis:
Saya membaca
get_posts_by_author_sql()
dan bagaimana seharusnya membangun pernyataan WHERE untuk Anda, tetapi hasil yang saya dapatkan selalu "1 = 0". Jadi saya hanya menulis sisa pernyataan SQL, karenaget_posts_by_author_sql()
hanya menghemat Anda harus menulis dua bit: tipe posting dan penulis:Ini berfungsi dengan baik, dan akan menambahkan kolom sebanyak yang Anda inginkan, tetapi masing-masing menggunakan ruang horisontal, sedangkan tutorial Mike akan menambahkan satu kolom untuk jenis posting kustom, dan kemudian daftar sebagai tabel di dalam baris itu. Info yang sama, visualisasi yang berbeda. Mike's mungkin lebih baik untuk sejumlah besar jenis, karena ia membangun daftar vertikal kental (dan hanya menampilkan item hitungan jika tidak kosong), sementara metode sorich87 baik untuk jumlah yang lebih kecil, karena hanya ada begitu banyak ruang kolom horizontal yang tersedia.
Jangan lupa Anda dapat menambahkan "post_status = publikasikan" ke dalam kueri untuk hanya mengembalikan item yang dipublikasikan, seperti contoh saat ini mengembalikan semua posting ...
sumber
get_posts_by_author_sql( $column, true, $user_id );
harus membangun pernyataan di mana.Berikut ini akan ditambahkan:
sumber
get_posts_by_author_sql()
eh? Yang baru bagi saya; Terima kasih! Tapi saya baru saja memeriksa kode Anda dan saya pikir itu tidak sesuai dengan yang ia harapkan.get_posts_by_author_sql()
Panggilan Anda selalu kembali'1=0
', dan dia ingin mendapatkan daftar jumlah berdasarkan jenis posting untuk pengguna; kecuali saya salah paham kode ini tidak melakukan itu. Mungkin Anda bisa memperbaikinya?post_type
dengan nama jenis tulisan. Misalnya:get_posts_by_author_sql( 'book', true, $user_id );
untuk jenis posting yang disebut 'buku'. Diuji dan berhasil.