Crear filtro de imágenes destacadas en biblioteca de medios

  • Autor Autor adruiz
  • Fecha de inicio Fecha de inicio
adruiz

adruiz

VIP
Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
Básicamente, lo que veis en la siguiente imagen:
fYslcJD.png


Este filtro lo he creado con el siguiente código:
PHP:
    add_filter('media_view_settings', 'featured_image_filter');
    add_action('pre_get_posts', 'create_featured_image_filter', 1);

    function featured_image_filter($settings) {
        $settings['mimeTypes']['wpsefeaturedimage'] = 'Imágenes destacadas';
        return $settings;
    }

    function create_featured_image_filter(\WP_Query $q) {
        if('wpsefeaturedimage' === $q->get('post_mime_type')) {
            $q->set('post_mime_type', '');
            $q->set('wpse_filter_featured', true);

            add_filter('posts_where', function ($where, \WP_Query $q) {
                if($q->get('wpse_filter_featured')) {
                    global $wpdb;
                    $where .= " AND {$wpdb->posts}.ID IN
                        (SELECT DISTINCT m.meta_value FROM {$wpdb->postmeta} m
                          WHERE m.meta_key = '_thumbnail_id'
                        )";
                }
                return $where;
            }, 10, 2 );
        }
    }

¿El problema? Que solo sirve para la vista en grid y no para listados (list view), entonces no me sirve porque lo que me interesa es realizar una acción en lote para regenerar miniaturas. La vista en grid permite seleccionar varias imagenes, pero la única acción que permite es borrar.

Con restrict_manage_posts podría crear un filtro para la vista en listados, por ejemplo, filtrando por autor, pero no tengo claro de cómo hacerlo para filtrar por imagenes destacadas.

¿Alguna sugerencia? Gracias 🙂
 
Básicamente, lo que veis en la siguiente imagen:
fYslcJD.png


Este filtro lo he creado con el siguiente código:
PHP:
    add_filter('media_view_settings', 'featured_image_filter');
    add_action('pre_get_posts', 'create_featured_image_filter', 1);

    function featured_image_filter($settings) {
        $settings['mimeTypes']['wpsefeaturedimage'] = 'Imágenes destacadas';
        return $settings;
    }

    function create_featured_image_filter(\WP_Query $q) {
        if('wpsefeaturedimage' === $q->get('post_mime_type')) {
            $q->set('post_mime_type', '');
            $q->set('wpse_filter_featured', true);

            add_filter('posts_where', function ($where, \WP_Query $q) {
                if($q->get('wpse_filter_featured')) {
                    global $wpdb;
                    $where .= " AND {$wpdb->posts}.ID IN
                        (SELECT DISTINCT m.meta_value FROM {$wpdb->postmeta} m
                          WHERE m.meta_key = '_thumbnail_id'
                        )";
                }
                return $where;
            }, 10, 2 );
        }
    }

¿El problema? Que solo sirve para la vista en grid y no para listados (list view), entonces no me sirve porque lo que me interesa es realizar una acción en lote para regenerar miniaturas. La vista en grid permite seleccionar varias imagenes, pero la única acción que permite es borrar.

Con restrict_manage_posts podría crear un filtro para la vista en listados, por ejemplo, filtrando por autor, pero no tengo claro de cómo hacerlo para filtrar por imagenes destacadas.

¿Alguna sugerencia? Gracias 🙂
¡Hola! Para lograr filtrar por imágenes destacadas en la vista de listado de la biblioteca de medios, puedes probar con el siguiente enfoque:

PHP:
// Agregar el filtro al administrador de medios
add_action('restrict_manage_posts', 'featured_image_filter_dropdown');

// Filtrar por imágenes destacadas
function featured_image_filter_dropdown() {
    // Verificar si estamos en la biblioteca de medios
    if ('upload.php' !== $GLOBALS['typenow']) {
        return;
    }

    // Mostrar el dropdown de filtro
    $selected = isset($_GET['featured_image_filter']) ? $_GET['featured_image_filter'] : '';
    $args = array(
        'show_option_all' => 'Todas las imágenes',
        'hide_empty'      => false,
        'hierarchical'    => true,
        'name'            => 'featured_image_filter',
        'id'              => 'featured_image_filter',
        'taxonomy'        => 'post_mime_type',
        'value_field'     => 'slug',
        'selected'        => $selected,
    );

    wp_dropdown_categories($args);
}

// Procesar el filtro
add_filter('parse_query', 'featured_image_filter_query');

function featured_image_filter_query($query) {
    global $pagenow;
   
    // Verificar que estamos en la biblioteca de medios y se ha seleccionado el filtro
    if ('upload.php' == $pagenow && isset($_GET['featured_image_filter']) && $_GET['featured_image_filter'] != 0) {
        $query->set('meta_query', array(
            array(
                'key'     => '_thumbnail_id',
                'compare' => 'EXISTS',
            ),
        ));
    }
}

Con este código, deberías poder agregar un filtro por imágenes destacadas en la vista de listado de la biblioteca de medios. Al seleccionar el filtro, se mostrarán solo imágenes que tengan una imagen destacada asociada. ¡Espero que te sea útil! ¡Déjame saber si necesitas más ayuda!
 
Atrás
Arriba