web-dev-qa-db-fra.com

Comment ajouter un filtre d'auteur à la médiathèque?

Par défaut, la bibliothèque de médias WordPress vous permet de filtrer les résultats en fonction de leur type ou de leur date. Comment puis-je ajouter une troisième liste déroulante à la liste et filtrer par auteur?

Actuellement nous avons ceci:

 enter image description here 

J'aimerais avoir ce qui suit:

 enter image description here 

Selon ce ticket (sauf si je le lis mal), le code a été ajouté il y a trois ans à /wp-admin/includes/class-wp-media-list-table.php pour permettre cela, mais je ne vois pas comment cela fonctionne réellement.

Le codex indique également qu'il est possible de modifier la fenêtre modale de la médiathèque que vous obtenez lorsque vous modifiez une page ou une publication avec:

add_filter( 'ajax_query_attachments_args', 'show_current_user_attachments', 10, 1 );
function show_current_user_attachments( $query = array() ) {
    $user_id = get_current_user_id();
    if( $user_id ) {
        $query['author'] = $user_id;
    }
    return $query;
}

Je pense donc qu'il est possible de faire quelque chose de similaire sur la page principale de la médiathèque, mais je ne vois pas comment.

3
j08691

Dans votre question, vous avez montré l'image qui est une vue en grille et que le codex appartient à une vue en liste. Donc, je suis confus ici pour quelle section vous parlez.

Affichage de la grille: n'est pas possible à moins que vous ne changiez le cœur car ils ne fournissent pas de hook et que toute la section des médias a été créée par jquery, backbone et unserscore. Veuillez regarder dans media-grid.min.js ou media-grid.js pour le code.

Vue Liste: Dans cette vue, vous pouvez facilement ajouter une liste déroulante. voici le script pour le faire. Si vous le souhaitez, ajoutez un filtre parse_query ou pre_get_posts pour modifier la requête du menu déroulant. Comme je suis en train de mettre author à url, wordpress le règle pour moi, donc besoin de ces filtres.

function media_add_author_dropdown()
{
    $scr = get_current_screen();
    if ( $scr->base !== 'upload' ) return;

    $author   = filter_input(INPUT_GET, 'author', FILTER_SANITIZE_STRING );
    $selected = (int)$author > 0 ? $author : '-1';
    $args = array(
        'show_option_none'   => 'All Authors',
        'name'               => 'author',
        'selected'           => $selected
    );
    wp_dropdown_users( $args );
}
add_action('restrict_manage_posts', 'media_add_author_dropdown');

Voici les références

  1. restrict_manage_posts
  2. pre_get_posts
  3. parse_query

Edit # 1: Ajout du filtre d’auteurs après comment

function author_filter($query) {
    if ( is_admin() && $query->is_main_query() ) {
        if (isset($_GET['author']) && $_GET['author'] == -1) {
            $query->set('author', '');
        }
    }
}
add_action('pre_get_posts','author_filter');
3
Webloper

Si vous en avez besoin pour votre propre site, vous pouvez accéder à la liste et cliquer sur le nom de l'auteur sous Auteur au lieu du code. Cela vous donnerait la liste des médias pour cet auteur particulier. Voir ci-dessous capture d'écran.

 enter image description here 

Mais si vous faites cela pour n'importe quel client, vous aurez besoin d'un code pour fournir une manière conviviale :) comme le menu déroulant que vous avez montré dans votre capture d'écran :)

1
sbounty