Media library - Limiter les images au type de publication personnalisé

10

Existe-t-il un plugin magique / wordpress permettant à la médiathèque d'afficher uniquement les images téléchargées vers un type de publication personnalisé spécifique? J'ai un type de message personnalisé appelé "artistes". Je souhaite que, lorsque l'administrateur clique pour télécharger / joindre une image, le menu contextuel de la bibliothèque multimédia affiche uniquement les images qui ont été téléchargées dans le type personnalisé de l'artiste, et non sur l'ensemble du site. p>

J'utilise le plug-in ACF pour gérer les champs personnalisés et les types de publication personnalisés ui. Est-ce possible?

    
posée BillyMedia 01.04.2015 - 12:56

1 réponse

9

Je ne suis pas sûr à 100% si j'ai bien résolu votre problème, mais ... Peut-être que cela vous aidera ...

L'éditeur de média obtient des pièces jointes avec la simple WP_Query . Vous pouvez donc utiliser de nombreux filtres pour modifier son contenu.

Le seul problème est que vous ne pouvez pas interroger les publications ayant un CPT spécifique en tant que parent à l'aide de WP_Query arguments ... Nous devrons donc utiliser posts_where et posts_join filtres.

Pour être sûr que nous ne changerons que la requête de l'éditeur de média, nous utiliserons ajax_query_attachments_args .

Et voici à quoi il ressemble, une fois combinés:

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post ) {
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

function my_posts_join($join) {
    global $wpdb;

    $join .= " LEFT JOIN {$wpdb->posts} as my_post_parent ON ({$wpdb->posts}.post_parent = my_post_parent.ID) ";

    return $join;
}


function my_bind_media_uploader_special_filters($query) {
    add_filter('posts_where', 'my_posts_where');
    add_filter('posts_join', 'my_posts_join');

    return $query;
}
add_filter('ajax_query_attachments_args', 'my_bind_media_uploader_special_filters');

Lorsque vous ouvrez la boîte de dialogue de téléchargement de média lors de la modification d'un post (post / page / CPT), vous ne verrez que les images jointes à ce type de post spécifique.

Si vous souhaitez que cela ne fonctionne que pour un type de message spécifique (disons des pages), vous devrez modifier la condition dans my_posts_where function comme suit:

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post && 'page' == $post->post_type ) {  // you can change 'page' to any other post type
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}
    
réponse donnée Krzysiek Dróżdż 08.06.2015 - 23:03

Lire d'autres questions sur les étiquettes