Припускаючи, що я зрозумів питання, що вам потрібно зробити, це підключити два гачки, пов’язані із заголовками стовпців та значеннями стовпців для сторінок управління адміністратором. Вони є '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'
гачок, який викликається лише для нестандартних стовпців. Ми робимо тест на те, $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()
час запуску запитів на посадах, але цей запит потребував би використання стількох інших гачків, що просто здавалося легше "пустувати" і робити все в одному.
Я опустив будь-яку посаду $post->post_type
IS 'revision'
або , 'nav_menu_item'
але залишили в 'attachments'
. Можливо, вам краще буде чітко включити потрібні типи публікацій, а не виключати декілька, які я зробив.
Я також фільтрував $post->post_status
лише за 'publish'
та 'pending'
. Якщо ви хочете , щоб також включати в себе 'future'
, 'private'
і / або 'draft'
вам необхідно внести зміни в код.
Для кожного завантаження сторінки я закликаю цю _yoursite_get_author_post_type_counts()
функцію лише один раз, а потім зберігаю в статичну змінну, а не дзвінок для кожного користувача. Я зберігаю в масиві, індексованому ідентифікаторами автора / користувача, що містить масив з іменем Type Post в елементі, '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;
}
Результатний інтерфейс користувача
Ось як виглядає застосовано до моєї тестової установки WordPress 3.0.1:
(джерело: mikeschinkel.com )
Завантажте повний код
Ви можете завантажити повний код з Gist :
Ви можете скопіювати цей код у functions.php
файл вашої теми або зберегти, включивши його у плагін, залежно від того, що ви оберете.
Сподіваюся, це допомагає!