Come nascondere le immagini nella libreria media agli utenti comuni?
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.

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!

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!

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

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