Suponiendo que entendí la pregunta, lo que debe hacer es conectar los dos ganchos relacionados con los encabezados de columna y el valor de las columnas para las páginas de administración del administrador. Ellos son 'manage_{$type}_columns'
y 'manage_{$type}_custom_column'
dónde en su caso de uso {$type}
es users
.
El 'manage_users_columns'
gancho
Este primero es simple, le permite especificar los encabezados de columna y, por lo tanto, las columnas disponibles. WordPress codifica el valor de la columna "Publicaciones" , por lo que, dado que desea cambiarlo, simplemente lo eliminaremos unset()
y luego agregaremos una nueva columna con el mismo título, pero que en su lugar tiene el 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;
}
El 'manage_users_custom_column'
gancho
A continuación, debe usar el 'manage_users_custom_column'
gancho que solo se llama para columnas no estándar. Probamos para $column_name=='custom_posts'
hacer que nuestro código sea robusto en caso de que agreguemos nuevas columnas de usuario en el futuro y luego tomamos los recuentos de tipo de publicación de usuario de la función que escribí, _yoursite_get_author_post_type_counts()
que analizaré a continuación. Luego jugué con algunas formas de formatear esto, pero decidí que un HTML <table>
era el más apropiado (ya que es una tabla de datos) . Si una tabla no funciona para usted, supongo que podrá generar un marcado diferente con bastante facilidad:
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;
}
Obtener publicaciones cuenta por tipo de publicación para cada usuario / autor
Por último, existe la recuperación de los recuentos de publicaciones por tipo de publicación por autor / usuario. En general, trato de seguir usando WP_Query()
cuando ejecuto consultas en publicaciones, pero esta consulta habría requerido el uso de tantos otros ganchos que parecía más fácil ser "travieso" y hacerlo todo en uno.
Omití cualquier publicación de $post->post_type
is 'revision'
o 'nav_menu_item'
but left 'attachments'
. Puede que le resulte mejor incluir explícitamente los tipos de publicación que desea en lugar de excluir los pocos que hice.
También filtré por $post->post_status
solo 'publish'
y 'pending'
. Si desea incluir también 'future'
, 'private'
y / o 'draft'
deberá realizar los cambios en el código.
Para cada carga de página, solo llamo a esta _yoursite_get_author_post_type_counts()
función una vez y luego la guardo en una variable estática en lugar de llamar a cada usuario. Almaceno en una matriz indexada por ID de autor / usuario que contiene una matriz con el nombre del tipo de publicación en el elemento 'label'
y, por supuesto, la cuenta en un elemento con el mismo nombre:
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;
}
La interfaz de usuario resultante
Y esto es lo que parece aplicado a mi instalación de prueba de WordPress 3.0.1:
(fuente: mikeschinkel.com )
Descargar el código completo
Puede descargar el código completo de Gist :
Puede copiar este código en el functions.php
archivo o la tienda de su tema e incluir el archivo en un complemento, lo que elija.
¡Espero que esto ayude!