สมมติว่าฉันเข้าใจคำถามสิ่งที่คุณต้องทำคือขอลงในสอง hooks ที่เกี่ยวข้องกับส่วนหัวของคอลัมน์และค่าคอลัมน์สำหรับผู้ดูแลระบบจัดการหน้า พวกเขาเป็น'manage_{$type}_columns'
และ'manage_{$type}_custom_column'
ที่ในกรณีการใช้งานของคุณคือ{$type}
users
'manage_users_columns'
เบ็ด
อันแรกนี้ง่ายมันช่วยให้คุณระบุส่วนหัวของคอลัมน์และคอลัมน์ที่มีอยู่ WordPress ฮาร์ดโค้ดมูลค่าของคอลัมน์"โพสต์"ดังนั้นเมื่อคุณต้องการเปลี่ยนเราจะทำการลบออกunset()
แล้วเพิ่มคอลัมน์ใหม่ที่มีชื่อเดียวกัน แต่แทนที่มีตัวระบุแทน'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;
}
'manage_users_custom_column'
เบ็ด
ถัดไปคุณจะต้องใช้'manage_users_custom_column'
hook ซึ่งเรียกใช้เฉพาะคอลัมน์ที่ไม่ได้มาตรฐานเท่านั้น เราทดสอบ$column_name=='custom_posts'
เพื่อให้รหัสของเรามีประสิทธิภาพในกรณีที่เราเพิ่มคอลัมน์ผู้ใช้ใหม่ในอนาคตและจากนั้นเราจะนับจำนวนโพสต์ของผู้ใช้จากฟังก์ชั่นที่ฉันเขียน_yoursite_get_author_post_type_counts()
ซึ่งฉันจะพูดถึงต่อไป จากนั้นผมก็เล่นกับไม่กี่วิธีการจัดรูปแบบนี้ แต่ตัดสินใจ HTML ที่<table>
มีความเหมาะสมมากที่สุด(เพราะมันเป็นตารางของข้อมูล) หากตารางไม่ทำงานสำหรับคุณฉันคิดว่าคุณจะสามารถสร้างมาร์กอัปที่แตกต่างกันได้อย่างง่ายดาย:
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;
}
รับโพสต์นับตามประเภทโพสต์สำหรับผู้ใช้แต่ละคน / ผู้เขียน
สุดท้ายมีการดึงจำนวนการโพสต์ตามประเภทโพสต์โดยผู้เขียน / ผู้ใช้ โดยทั่วไปฉันพยายามติดกับการใช้WP_Query()
เมื่อเรียกใช้แบบสอบถามในการโพสต์ แต่แบบสอบถามนี้จะต้องใช้ hooks อื่น ๆ มากมายมันดูง่ายกว่าที่จะ"ซุกซน"และทำได้ทั้งหมดในที่เดียว
ฉันละเว้นการโพสต์ใด ๆ$post->post_type
มี'revision'
หรือแต่ที่เหลืออยู่ใน'nav_menu_item'
'attachments'
คุณอาจพบว่าดีกว่าที่จะรวมประเภทโพสต์ที่คุณต้องการแทนการยกเว้นที่ฉันทำ
ฉันยังกรองโดย$post->post_status
เพียงและ'publish'
'pending'
หากคุณต้องการ ได้แก่'future'
, 'private'
และ / หรือ'draft'
คุณจะต้องทำการเปลี่ยนแปลงในรหัส
สำหรับการโหลดแต่ละหน้าฉันเรียก_yoursite_get_author_post_type_counts()
ใช้ฟังก์ชันนี้เพียงครั้งเดียวแล้วเก็บไว้ในตัวแปรแบบคงที่แทนที่จะเรียกใช้สำหรับผู้ใช้แต่ละคน ฉันเก็บไว้ในอาร์เรย์ที่จัดทำดัชนีโดยผู้เขียน / ID ผู้ใช้ที่มีอาร์เรย์ที่มีชื่อประเภทโพสต์ในองค์ประกอบ'label'
และแน่นอนจำนวนในองค์ประกอบที่มีชื่อเดียวกัน:
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 ผลลัพธ์
และนี่คือสิ่งที่ดูเหมือนว่านำไปใช้กับการทดสอบการติดตั้ง WordPress 3.0.1 ของฉัน:
(ที่มา: mikeschinkel.com )
ดาวน์โหลดรหัสเต็ม
คุณสามารถดาวน์โหลดรหัสเต็มจากส่วนสำคัญ :
คุณสามารถคัดลอกรหัสนี้ไปยังfunctions.php
ไฟล์ของธีมหรือร้านค้ารวมถึงไฟล์ในปลั๊กอินใดก็ได้ที่คุณเลือก
หวังว่านี่จะช่วยได้!