Last active
September 20, 2024 14:07
-
-
Save cuxaro/8619bdc41c82f944e33c4e9f39ebb842 to your computer and use it in GitHub Desktop.
Añadir una columan extra con todos los posts y los CPT que le indiquemos. Tiene una serie de hooks para extenderlo y modificadlo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Eliminar la columna de "Entradas" en la tabla de usuarios y agregar una nueva columna con enlaces a los CPTs | |
add_filter('manage_users_columns', 'ibp_remove_and_add_custom_posts_column'); | |
add_filter('manage_users_custom_column', 'ibp_add_custom_posts_column_content', 10, 3); | |
// Función para eliminar la columna de "Entradas" predeterminada y añadir una nueva | |
function ibp_remove_and_add_custom_posts_column($columns) { | |
// Permitir personalización de las columnas existentes antes de modificar | |
$columns = apply_filters('ibp_before_modify_users_columns', $columns); | |
// Controlar si eliminar o no la columna de "Entradas" predeterminada | |
$remove_posts_column = apply_filters('ibp_remove_posts_column', true); // True por defecto para eliminarla | |
if ($remove_posts_column && isset($columns['posts'])) { | |
unset($columns['posts']); | |
} | |
// Añadir una nueva columna personalizada | |
$columns['ibp_custom_posts'] = apply_filters('ibp_custom_posts_column_label', __('Contenido', 'ibp')); | |
return apply_filters('ibp_after_modify_users_columns', $columns); | |
} | |
// Función para mostrar el contenido de la nueva columna personalizada con links | |
function ibp_add_custom_posts_column_content($output, $column_name, $user_id) { | |
if ('ibp_custom_posts' === $column_name) { | |
// Tipos de post que queremos contar y mostrar | |
$post_types = [ | |
'post' => __('Post', 'ibp'), | |
'actualidad' => __('Actualidad', 'ibp') | |
]; | |
// Permitir personalización de los tipos de post a través de un filtro | |
$post_types = apply_filters('ibp_add_custom_posts_column_content_post_types', $post_types); | |
// Iniciar variable de salida | |
$output = ''; | |
// Variable para contar el total de entradas | |
$total_count = 0; | |
// Estados de los posts que queremos incluir | |
$post_status = array('publish', 'pending', 'draft', 'future', 'private'); | |
$post_status = apply_filters('ibp_add_custom_posts_column_content_post_status', $post_status); | |
// Consultar y contar los posts de cada tipo de post y añadir el enlace | |
foreach ($post_types as $post_type => $label) { | |
// Parámetros de la consulta WP_Query | |
$args = apply_filters('ibp_custom_posts_query_args', [ | |
'author' => $user_id, | |
'post_type' => $post_type, | |
'post_status' => $post_status, // Estados de los posts | |
'posts_per_page'=> -1, // Obtener todos los posts sin límite | |
'fields' => 'ids', // Solo necesitamos los IDs para contar | |
], $user_id, $post_type); | |
// Ejecutar la consulta | |
$query = new WP_Query($args); | |
// Sumar el total de posts encontrados para este tipo | |
$count = $query->found_posts; | |
// Sumar al contador total | |
$total_count += $count; | |
// Generar la URL para ver los posts de este tipo y autor | |
$link = apply_filters('ibp_custom_post_type_link', admin_url("edit.php?post_type=$post_type&author=$user_id"), $post_type, $user_id); | |
// Añadir el conteo y el enlace al output, con un salto de línea | |
$output .= apply_filters('ibp_custom_post_type_output', "$label: <a href='" . esc_url($link) . "'>$count</a><br />", $label, $link, $count); | |
} | |
// Añadir el total de todos los tipos de post al final | |
$output .= apply_filters('ibp_custom_post_type_total_output', '<strong>' . __('Total: ', 'ibp') . $total_count . '</strong>', $total_count); | |
return $output; | |
} | |
return $output; | |
} |
add_filter('ibp_before_modify_users_columns', function($columns) {
// Agregar una nueva columna antes de cualquier modificación
$columns['ibp_custom_column_before'] = __('Nueva Columna Antes', 'ibp');
return $columns;
});
add_filter('ibp_after_modify_users_columns', function($columns) {
// Agregar una nueva columna después de la modificación
$columns['ibp_custom_column_after'] = __('Nueva Columna Después', 'ibp');
return $columns;
});
add_filter('ibp_custom_posts_column_label', function($label) {
return __('Mis Entradas Personalizadas', 'ibp'); // Cambia el título de la columna
});
add_filter('ibp_add_custom_posts_column_content_post_types', function($post_types) {
// Añadir un nuevo tipo de post personalizado "evento"
$post_types['evento'] = __('Evento', 'ibp');
return $post_types;
});
add_filter('ibp_add_custom_posts_column_content_post_status', function($post_status) {
// Incluir solo los posts publicados y pendientes
return ['publish', 'pending'];
});
add_filter('ibp_custom_posts_query_args', function($args, $user_id, $post_type) {
// Modificar la consulta para contar solo posts del año actual
$args['date_query'] = [
[
'year' => date('Y'),
]
];
return $args;
}, 10, 3);
add_filter('ibp_custom_post_type_link', function($link, $post_type, $user_id) {
// Modificar el enlace para incluir una categoría específica
return add_query_arg('category_name', 'mi-categoria', $link);
}, 10, 3);
add_filter('ibp_custom_post_type_output', function($output, $label, $link, $count) {
// Cambiar el formato de salida para incluir un icono
return '<span class="dashicons dashicons-admin-post"></span> ' . $label . ': <a href="' . esc_url($link) . '">' . $count . '</a><br />';
}, 10, 4);
add_filter('ibp_custom_post_type_total_output', function($output, $total_count) {
// Cambiar el estilo del total de posts
return '<strong style="color: blue;">' . __('Total de Entradas: ', 'ibp') . $total_count . '</strong>';
}, 10, 2);
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.