Come nascondere le immagini nella libreria media agli utenti comuni?

20 dic 2012, 18:57:25
Visualizzazioni: 17.2K
Voti: 5

Come amministratore apprezzo molto le funzionalità del gestore media di WordPress 3.5.

Tuttavia, in un sito multi-utente tutti gli utenti possono vedere tutte le immagini nella libreria media, sia che le abbiano caricate loro o meno. In precedenza, uno script in functions.php poteva mascherare/restringere l'accesso.
Per esempio:

// Nascondi la scheda Libreria Media ad ogni singolo agente
function remove_medialibrary_tab($tabs) {
    if ( !current_user_can( 'update_core' ) ) {
        unset($tabs['library']);
        return $tabs;
    }    }
add_filter('media_upload_tabs','remove_medialibrary_tab');

Questo non funziona più poiché credo che la libreria media sia ora basata su JavaScript.

La domanda: come posso ora nascondere o mascherare le immagini della libreria media di WordPress 3.5 agli utenti che non le hanno caricate? Voglio che gli utenti vedano solo le proprie immagini o solo quelle che hanno caricato in un determinato post o pagina.

L'attuale struttura e design è ottima per realtà come i giornali che vogliono condividere immagini tra tutta l'organizzazione, ma non altrettanto per siti che necessitano di controlli più rigidi con accesso multi-utente indipendente.

Non sono un programmatore - o al massimo sono un dilettante - ma mi viene in mente che le opzioni potrebbero includere: mascherare o rimuovere tutti i filtri degli allegati nel nuovo menu a discesa della libreria 3.5 lasciando solo "caricati in questa pagina" nella lista - oppure - un interruttore che permetta agli amministratori di attivare o disattivare la visibilità delle immagini della libreria media per gli utenti comuni.

Qualsiasi guida o direzione su questo sarebbe apprezzata.

1
Commenti

Dai un'occhiata a questo post, poi a questo plugin: http://wordpress.org/support/topic/restrict-editors-from-viewing-media-that-others-have-uploaded http://wordpress.org/support/view/plugin-reviews/view-own-posts-media-only Sembra risolvere il problema in WP 3.5

User User
8 gen 2013 04:47:04
Tutte le risposte alla domanda 3
2
11

Per consentire agli utenti attuali di visualizzare solo i propri allegati caricati, aggiungi il seguente codice alle azioni del tuo tema:

add_filter( 'posts_where', 'devplus_wpquery_where' );
function devplus_wpquery_where( $where ){
    global $current_user;

    if( is_user_logged_in() ){
         // utente loggato, ma stiamo visualizzando la libreria?
         if( isset( $_POST['action'] ) && ( $_POST['action'] == 'query-attachments' ) ){
            // qui puoi aggiungere ulteriore logica se lo desideri
            $where .= ' AND post_author='.$current_user->data->ID;
        }
    }

    return $where;
}

Spero che questo sia utile!

5 lug 2013 17:49:33
Commenti

Ho provato così tante opzioni per far funzionare questo sul front end e con ACF. Questa è la prima che funziona per me. Una soluzione fantastica! Grazie!

Jake Jake
1 feb 2014 03:26:46

Stavo avendo difficoltà a limitare il Media Uploader per un modulo ACF frontend in modo da visualizzare solo gli allegati caricati dall'utente. Non conoscevo posts_where - Sembra funzionare alla grande! Grazie per averlo pubblicato.

derekshirk derekshirk
16 mar 2016 20:01:12
1

Grazie @timocouckuyt, funziona bene ma hai bisogno anche di questo per il link /wp-admin/upload.php :

add_filter('pre_get_posts', 'hide_posts_media_by_other');
function hide_posts_media_by_other($query) {
global $pagenow;

if( 'upload.php' != $pagenow || !$query->is_admin ){
    return $query;
}

if( !current_user_can( 'manage_options' ) ) {
    global $user_ID;
    $query->set('author', $user_ID );
}
return $query;
}

Per il tutorial completo su come nascondere media e post di altri utenti, consulta questo tutorial: http://jeffreycarandang.com/tutorials/hide-wordpress-posts-media-uploaded-users/

Saluti, phpbits

6 apr 2014 15:14:16
Commenti

Il link in questa risposta è rotto @JeffreyCarandang, saresti in grado di sistemarlo per favore?

osxconor osxconor
12 ott 2021 12:11:02
0

riferimento sorgente: https://www.wpexplorer.com/disable-image-page/

Reindirizzamento tramite Funzione Personalizzata

<?php
// Nasconde gli allegati dalla visualizzazione frontend reindirizzando gli utenti
function hide_my_attachments_by_redirecting() {
    if ( is_attachment() ) {
        global $post;
        if ( $post && $post->post_parent ) {
            wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
            exit;
        } else {
            wp_redirect( esc_url( home_url( '/' ) ), 301 );
            exit;
        }
    }
}
add_action( 'template_redirect', 'hide_my_attachments_by_redirecting' );

OPPURE

Reindirizzamento tramite il file image.php

La seconda opzione è disabilitare completamente le pagine degli allegati aggiungendo un reindirizzamento WordPress direttamente all'inizio del tuo file image.php.

  1. Crea un nuovo file chiamato image.php nel tuo child theme (è sempre meglio lavorare con i child theme quando modifichi un tema) oppure, se stai sviluppando il tuo tema, crea un file image.php vuoto nel tuo tema.
  2. Inserisci il codice qui sotto nel tuo file image.php.
<?php
global $post;
if ( $post && $post->post_parent ) {
    wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
    exit;
} else {
    wp_redirect( esc_url( home_url( '/' ) ), 301 );
    exit;
}
1 nov 2022 18:08:11