私が質問を理解したと仮定すると、あなたがする必要があるのは、admin管理ページの列ヘッダーと列値に関連する2つのフックにフックすることです。彼らはある'manage_{$type}_columns'
と'manage_{$type}_custom_column'
どこユースケースです。{$type}
users
'manage_users_columns'
フック
最初の1つは単純で、列ヘッダーを指定できるため、使用可能な列を指定できます。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()
は投稿に対してクエリを実行するときに使用することに固執しようとしますが、このクエリは他の多くのフックを使用する必要があり、「いたずら」になり、すべてを1つに行う方が簡単に思えました。
$post->post_type
is 'revision'
またはorの投稿を省略し'nav_menu_item'
ました'attachments'
。私が行った少数の投稿を除外するよりも、希望する投稿の種類を明示的に含めるほうが良いかもしれません。
私も$post->post_status
for 'publish'
とでフィルタリングしました'pending'
。も含めたい場合'future'
、'private'
および/または'draft'
コードに変更を加える必要があります。
ページの読み込みごとに、この_yoursite_get_author_post_type_counts()
関数を1回だけ呼び出してから、ユーザーごとに呼び出すのではなく、静的変数に格納します。要素に投稿タイプ名の配列を含む作成者/ユーザー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)
完全なコードをダウンロードする
Gistから完全なコードをダウンロードできます。
このコードをテーマのfunctions.php
ファイルにコピーするか、ファイルをプラグインに格納して、どちらを選択してもかまいません。
お役に立てれば!