Giả sử tôi đã hiểu câu hỏi, điều bạn cần làm là móc vào hai móc liên quan đến tiêu đề cột và giá trị cột cho các trang quản lý quản trị viên. Họ 'manage_{$type}_columns'
và 'manage_{$type}_custom_column'
nơi sử dụng hợp cụ thể của bạn {$type}
là users
.
Cái 'manage_users_columns'
móc
Cái đầu tiên này rất đơn giản, nó cho phép bạn chỉ định các tiêu đề cột và do đó các cột có sẵn. WordPress mã hóa giá trị của cột "Bài viết" vì vậy vì bạn muốn thay đổi nó, chúng tôi chỉ cần xóa nó đi unset()
và sau đó thêm một cột mới có cùng tiêu đề nhưng thay vào đó có định danh '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;
}
Cái 'manage_users_custom_column'
móc
Tiếp theo, bạn cần sử dụng 'manage_users_custom_column'
hook chỉ được gọi cho các cột không chuẩn. Chúng tôi kiểm tra $column_name=='custom_posts'
để làm cho mã của chúng tôi mạnh mẽ trong trường hợp chúng tôi thêm các cột người dùng mới trong tương lai và sau đó chúng tôi lấy số lượng bài đăng của người dùng từ chức năng tôi đã viết _yoursite_get_author_post_type_counts()
mà tôi sẽ thảo luận tiếp theo. Sau đó tôi đã chơi với một vài cách để định dạng này nhưng quyết định HTML <table>
là phù hợp nhất (vì đó là bảng dữ liệu) . Nếu một bảng không hoạt động với bạn, tôi cho rằng bạn sẽ có thể tạo các đánh dấu khác nhau khá dễ dàng:
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;
}
Nhận số lượng bài viết theo loại bài đăng cho mỗi người dùng / tác giả
Cuối cùng là việc truy xuất số lượng bài đăng theo loại bài đăng của tác giả / người dùng. Nói chung, tôi cố gắng sử dụng WP_Query()
khi chạy truy vấn trên các bài đăng nhưng truy vấn này sẽ yêu cầu sử dụng rất nhiều hook khác, nó dường như dễ "nghịch ngợm" hơn và thực hiện tất cả trong một.
Tôi đã bỏ qua bất kỳ bài đăng nào $post->post_type
là 'revision'
hoặc 'nav_menu_item'
nhưng để lại 'attachments'
. Bạn có thể thấy tốt hơn là bao gồm rõ ràng các loại bài đăng bạn muốn thay vì loại trừ số ít tôi đã làm.
Tôi cũng được lọc bởi $post->post_status
chỉ 'publish'
và 'pending'
. Nếu bạn cũng muốn bao gồm 'future'
, 'private'
và / hoặc 'draft'
bạn sẽ cần thực hiện các thay đổi trong mã.
Đối với mỗi lần tải trang, tôi chỉ gọi _yoursite_get_author_post_type_counts()
hàm này một lần và sau đó lưu vào một biến tĩnh thay vì gọi cho mỗi người dùng. Tôi lưu trữ trong một mảng được lập chỉ mục bởi ID tác giả / người dùng có chứa một mảng có tên Loại bài đăng trong thành phần 'label'
và tất nhiên số lượng trong một thành phần cùng tên:
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 kết quả
Và đây là giao diện được áp dụng cho bản cài đặt thử nghiệm WordPress 3.0.1 của tôi:
(nguồn: mikechinkel.com )
Tải xuống toàn bộ mã
Bạn có thể tải xuống mã đầy đủ từ Gist :
Bạn có thể sao chép mã này vào functions.php
tệp hoặc cửa hàng của chủ đề bao gồm tệp trong plugin, tùy theo bạn chọn.
Hi vọng điêu nay co ich!