web-dev-qa-db-fra.com

Filtrer les médias en vedette sur Admin

Généralement, nous pouvons filtrer les images dans Média> Bibliothèque par:

  • rendez-vous amoureux
  • par type MIME,
  • et par fichiers attachés/non attachés

... mais j'aimerais élargir ceci à un filtre par Images en vedette. De cette façon, nous pourrions filtrer uniquement les images configurées pour être en vedette dans certains types de publication ou de type de publication personnalisée.

Avez-vous des idées pour rendre cela possible?

Merci,

MODIFIER

J'ai ajouté ce code dans functions.php selon ce fil (il ne filtrera pas, mais il devrait limiter les résultats dans la médi les images présentées, c'est-à-dire qui ont _thumbnail_id comme méta), mais l'administrateur ne se charge pas et le serveur supprime une erreur.

add_action ('pre_get_posts', 'restrict_media') ;
function
restrict_media ($query)
{

    // get posts with thumbnails
    $args = array (
        'post_type' => 'galleries',
        'post_status' => array ('publish'),
        'posts_per_page' => -1,
        'meta_query' => array (
            array (
                'key' => '_thumbnail_id',
                'compare' => 'EXISTS',
                ),
            ),
        ) ;
    $with_thumbnail = new WP_Query ($args) ;
    // get the IDs of the thumbnails
    $thumbnail_ids = array_map (function ($p) { return (get_post_meta ($p->ID, '_thumbnail_id', true)) ; },
        $with_thumbnail->posts) ;

    // include all thumbnails
    $query->set ('post__in', array($thumbnail_ids)) ;

    return ;
}
1
Peanuts

Nous pouvons ajouter l'option sélectionnée en tant que type fake avec:

add_filter( 'media_view_settings', function( $settings )
{
    $settings['mimeTypes']['wpsefeaturedimage'] = 'Featured';
    return $settings;
});

Il va apparaître comme ceci:

Featured option

Ensuite, nous pouvons utiliser le filtre posts_where et vérifier notre type de faux mime:

/**
 * Filter for featured images in the media library popup
 */
add_action( 'pre_get_posts', function( \WP_Query $q )
{
    if( 'wpsefeaturedimage' === $q->get( 'post_mime_type' ) )
    {
        // Remove the fake mime type
        $q->set( 'post_mime_type', '' );
        // Mark this query as featured filtered
        $q->set( 'wpse_filter_featured', true );

        add_filter( 'posts_where', function ( $where, \WP_Query $q )
        {
            if( $q->get( 'wpse_filter_featured' ) )
            {
                global $wpdb;
                // Add 'featured images' restriction to the SQL query
                $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 );
    }
}, 1 );

Nous pouvons probablement ajuster cela davantage.

1
birgire