web-dev-qa-db-fra.com

Médiathèque - Limiter les images au type de publication personnalisé

Existe-t-il un plugin/magie 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 le site entier.

J'utilise le plugin ACF pour gérer les champs personnalisés et les types de publications personnalisées. Est-ce possible?

10
BillyMedia

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 un WP_Query simple, vous pouvez donc utiliser de nombreux filtres pour modifier son contenu.

Le seul problème est que vous ne pouvez pas interroger des publications avec un CPT spécifique en tant que parent en utilisant des arguments WP_Query ... Nous devrons donc utiliser des filtres posts_where et posts_join.

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 ça ressemble quand on les combine:

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 l'édition d'un post (post/page/CPT), seules les images attachées à ce type de post spécifique sont affichées.

Si vous souhaitez que cela ne fonctionne que pour un type de message spécifique (par exemple, pages), vous devrez modifier la condition dans la fonction my_posts_where 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;
}
9