it-swarm.com.de

Medienbibliothek - Beschränkt die Anzahl der Bilder auf den benutzerdefinierten Beitragstyp

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". Ich möchte, dass beim Klicken des Administrators zum Hochladen/Anhängen eines Bilds im Medienbibliotheks-Popup nur Bilder angezeigt werden, die zum benutzerdefinierten Künstlertyp hochgeladen wurden, und nicht die gesamte Website.

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

10
BillyMedia

Ich bin mir nicht zu 100% sicher, ob ich dein Problem richtig verstanden habe, aber ... Vielleicht hilft dir das ...

Media Uploader erhält Anhänge mit einfachem WP_Query, sodass Sie viele Filter verwenden können, um den Inhalt zu ändern.

Das einzige Problem ist, dass Sie keine Posts mit einem bestimmten CPT als übergeordnetes Element mit WP_Query-Argumenten abfragen können. Daher müssen posts_where- und posts_join-Filter verwendet werden.

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

Und so sieht es kombiniert aus:

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 während der Bearbeitung eines Beitrags (Beitrag/Seite/CPT) das Dialogfeld zum Hochladen von Medien öffnen, werden nur Bilder angezeigt, die an diesen bestimmten Beitragstyp angehängt sind.

Wenn Sie möchten, dass es nur für einen bestimmten Beitragstyp (sagen wir Seiten) funktioniert, müssen Sie die Bedingung in der Funktion my_posts_where 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;
}
9