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

10

Existe-t-il une magie / plugin wordpress qui fera que la bibliothèque multimédia n'affichera que les images qui ont été téléchargées vers un type de publication personnalisé spécifique? J'ai un type de publication personnalisé appelé "artistes", je veux, lorsque l'administrateur clique pour télécharger / attacher une image, que la fenêtre contextuelle de la bibliothèque multimédia affiche uniquement les images qui ont été téléchargées vers le type personnalisé des artistes, et non l'ensemble du site.

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

BillyMedia
la source
Permettez-moi de vérifier si je comprends bien ... Donc, vous souhaitez modifier la fenêtre contextuelle de la bibliothèque multimédia de telle sorte qu'elle affiche uniquement les images qui ont été téléchargées vers un CPT spécifique si vous l'ouvrez lors de la modification de ce CPT. Et cela devrait fonctionner comme toujours lorsque vous modifiez d'autres types de messages?
Krzysiek Dróżdż
Quel est le contexte / le raisonnement derrière cela? Essayez-vous d'implémenter un sélecteur d'artistes?
Tom J Nowell
1
Le cas d'utilisation dans mon cas est un grand site WordPress où tout le monde ne modifie pas les mêmes types de messages. Il est beaucoup plus ordonné (et utile) d'afficher les téléchargements de fichiers associés les plus récents par opposition aux téléchargements de partout sur le site, afin que les fichiers qui doivent être réutilisés puissent être facilement sélectionnés. (Je n'ai pas posé cette question à l'origine, mais j'ai ajouté la prime. J'essaie de faire exactement ce que Krzysiek a décrit (merci pour la réponse, je vais l'essayer))
guidod

Réponses:

9

Je ne suis pas sûr à 100% de bien résoudre votre problème, mais ... Peut-être que cela vous aidera ...

L'outil de téléchargement de médias obtient des pièces jointes avec une simplicité 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 avec CPT spécifique comme parent en utilisant des WP_Queryarguments ... Donc, nous devrons utiliser posts_whereet posts_joinfiltrer.

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

Et voici à quoi cela ressemble, une fois combiné:

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 pendant la modification de la publication (publication / page / CPT), vous ne verrez que les images attachées à ce type de publication spécifique.

Si vous souhaitez que cela ne fonctionne que pour un type de publication spécifique (disons les pages), vous devrez changer la condition de la my_posts_wherefonction 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;
}
Krzysiek Dróżdż
la source
Merci pour votre commentaire utile, j'ai supprimé ma réponse afin de ne dérouter personne. +1 sur le vôtre.
jackreichert
0

Afficher uniquement les images de la propriété lors de la modification de l'image sélectionnée

function my_bind_media_uploader_special_filters($query) 
{

    add_filter('posts_where', 'my_posts_where');
    return $query;
}

add_filter('ajax_query_attachments_args','my_bind_media_uploader_special_filters');

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 && 'property' == $post->post_type) {
            $where .= $wpdb->prepare(" AND id in (select distinct meta_value from 
            wpdb_postmeta where meta_key='fave_property_images' and post_id = $post_id)", 
            $post->post_type);
        }
    }
    return $where;
}
Azzam
la source