Medienbibliothek - Beschränken Sie Bilder auf den benutzerdefinierten Beitragstyp


10

Gibt es ein WordPress Magic / Plugin, mit dem die Medienbibliothek nur Bilder anzeigt, die auf einen bestimmten benutzerdefinierten Beitragstyp hochgeladen wurden? Ich habe einen benutzerdefinierten Beitragstyp namens "Künstler". Wenn der Administrator auf ein Bild klickt / es anfügt, möchte er, dass im Popup der Medienbibliothek nur Bilder angezeigt werden, die auf den benutzerdefinierten Typ des Künstlers hochgeladen wurden, und nicht die gesamte Site.

Ich verwende das ACF-Plugin für die Behandlung von benutzerdefinierten Feldern und benutzerdefinierten Beitragstypen. Ist das möglich?


Lassen Sie mich überprüfen, ob ich es richtig verstehe ... Sie möchten also das Popup der Medienbibliothek so ändern, dass nur Bilder angezeigt werden, die in ein bestimmtes CPT hochgeladen wurden, wenn Sie es während der Bearbeitung dieses CPT öffnen. Und es sollte wie immer funktionieren, wenn Sie andere Beitragstypen bearbeiten?
Krzysiek Dróżdż

Was ist der Kontext / die Argumentation dahinter? Versuchen Sie, eine Künstlerauswahl zu implementieren?
Tom J Nowell

1
Der Anwendungsfall in meinem Fall ist eine große WordPress-Site, auf der nicht jeder die gleichen Beitragstypen bearbeitet. Es ist viel übersichtlicher (und nützlicher), die neuesten zugehörigen Datei-Uploads anzuzeigen, im Gegensatz zu Uploads von überall auf der Website, sodass Dateien, die wiederverwendet werden müssen, einfach ausgewählt werden können. (Ich habe diese Frage ursprünglich nicht gestellt, aber das Kopfgeld hinzugefügt. Ich versuche genau das zu tun, was Krzysiek beschrieben hat (danke für die Antwort, ich werde es versuchen))
guidod

Antworten:


9

Ich bin nicht 100% sicher, ob ich Ihr Problem richtig verstehe, aber ... Vielleicht hilft Ihnen das ...

Media Uploader erhält Anhänge mit einfachen WP_Query, so dass Sie viele Filter verwenden können, um seinen Inhalt zu ändern.

Das einzige Problem ist, dass Sie keine Beiträge mit einem bestimmten CPT als übergeordnetem Element mit WP_QueryArgumenten abfragen können. Wir müssen also verwenden posts_whereund posts_joinfiltern.

Um sicherzugehen, dass wir nur die Abfrage des Medien-Uploaders ändern, verwenden wir diese ajax_query_attachments_args.

Und so sieht es aus, wenn es kombiniert wird:

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');

Wenn Sie das Dialogfeld zum Hochladen von Medien öffnen, während Sie den Beitrag bearbeiten (Beitrag / Seite / CPT), werden nur Bilder angezeigt, die diesem bestimmten Beitragstyp zugeordnet sind.

Wenn Sie möchten, dass es nur für einen bestimmten Beitragstyp funktioniert (z. B. Seiten), müssen Sie die my_posts_whereFunktionsbedingungen wie folgt ändern :

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;
}

Vielen Dank für Ihren hilfreichen Kommentar. Ich habe meine Antwort gelöscht, um niemanden zu verwirren. +1 auf deine.
Jackreichert

0

Zeigen Sie beim Bearbeiten des vorgestellten Bildes nur die Bilder der Eigenschaft an

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.