Skip to content

Instantly share code, notes, and snippets.

@cuxaro
Last active September 20, 2024 14:07
Show Gist options
  • Save cuxaro/8619bdc41c82f944e33c4e9f39ebb842 to your computer and use it in GitHub Desktop.
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
<?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;
}
@cuxaro
Copy link
Author

cuxaro commented Sep 18, 2024

// Evitar que se elimine la columna de "Entradas" predeterminada

add_filter('ibp_remove_posts_column', '__return_false');
// Controlar si se elimina o no la columna "Entradas" basándose en el rol del usuario

add_filter('ibp_remove_posts_column', function() {
    // Solo eliminar la columna de "Entradas" si el usuario actual es administrador
    if (current_user_can('administrator')) {
        return true; // Eliminar la columna
    }
    return false; // Mantener la columna
});

@cuxaro
Copy link
Author

cuxaro commented Sep 18, 2024

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