Supondo que eu entendi a pergunta, o que você precisa fazer é conectar os dois ganchos relacionados aos cabeçalhos das colunas e ao valor das colunas das páginas de gerenciamento do administrador. Eles são 'manage_{$type}_columns'
e 'manage_{$type}_custom_column'
em que na sua de casos de uso {$type}
é users
.
O 'manage_users_columns'
gancho
Este primeiro é simples, permite especificar os cabeçalhos das colunas e, portanto, as colunas disponíveis. O WordPress codifica o valor da coluna "Postagens". Assim, como você deseja alterá-lo, simplesmente o removemos unset()
e adicionamos uma nova coluna com o mesmo título, mas que possui o identificador de '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;
}
O 'manage_users_custom_column'
gancho
Em seguida, você precisa usar o 'manage_users_custom_column'
gancho, que só é chamado para colunas não padrão. Testamos para $column_name=='custom_posts'
tornar nosso código robusto, caso adicionemos novas colunas de usuário no futuro e, em seguida, obtemos as contagens de tipo de postagem do usuário na função que escrevi, _yoursite_get_author_post_type_counts()
que discutirei a seguir. Eu então joguei com algumas maneiras de formatar isso, mas decidi que um HTML <table>
era o mais apropriado (já que é uma tabela de dados) . Se uma tabela não funcionar para você, presumo que você poderá gerar marcações diferentes com bastante facilidade:
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;
}
Obter contagens de postagens por tipo de post para cada usuário / autor
Por fim, há a recuperação de contagens de mensagens por tipo de postagem por autor / usuário. Geralmente, tento manter o uso WP_Query()
ao executar consultas em postagens, mas essa consulta exigiria o uso de tantos outros ganchos que parecia mais fácil ser "malcriado" e fazer tudo em um.
Omiti qualquer postagem de $post->post_type
is 'revision'
or 'nav_menu_item'
but left 'attachments'
. Talvez seja melhor incluir explicitamente os tipos de postagem desejados, em vez de excluir os poucos que fiz.
Eu também filtrada por $post->post_status
apenas 'publish'
e 'pending'
. Se você quiser incluir também 'future'
, 'private'
e / ou 'draft'
você vai precisar para fazer as mudanças no código.
Para cada carregamento de página, eu chamo essa _yoursite_get_author_post_type_counts()
função apenas uma vez e, em seguida, armazeno em uma variável estática em vez de chamar para cada usuário. Eu armazeno em uma matriz indexada por IDs de autor / usuário que contêm uma matriz com o nome Post Type no elemento 'label'
e, claro, a contagem em um elemento com o mesmo nome:
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;
}
A interface do usuário resultante
E é isso que parece aplicado à minha instalação de teste do WordPress 3.0.1:
(fonte: mikeschinkel.com )
Faça o download do código completo
Você pode baixar o código completo do Gist :
Você pode copiar esse código no functions.php
arquivo do seu tema ou armazenar o arquivo em um plug-in, conforme sua escolha.
Espero que isto ajude!