Come disabilitare la visualizzazione di post e media di altri utenti di WordPress
Se hai mai lavorato su un sito della community di WordPress supportato da molti editori, potresti aver notato che anche se non puoi modificare i post di altri, puoi comunque visualizzare i titoli di ogni post all'interno dell'amministratore di WordPress.
È perché, per impostazione predefinita, WordPress consente agli autori di vedere i titoli di ogni post, bozza e media pubblicato.
In questo tutorial, ti mostreremo come disabilitare la visualizzazione di post e media di altri utenti.
Se vuoi vedere altri trucchi che puoi usare con WordPress, assicurati di controllare alcuni dei nostri altri articoli.
Ricordati di eseguire un backup di WordPress (utilizzando questi plugin) prima di procedere nel caso in cui qualcosa si rompa durante la modifica del codice.
Ulteriori informazioni sull'utilizzo WP_Query per tipi di post personalizzati.
1. Disabilita la visualizzazione di post e media di altri utenti di WordPress
Aggiungi il codice seguente al tuo file functions.php per disabilitare la visualizzazione di post e media di altri utenti.
add_action('pre_get_posts', 'query_set_only_author' );
function query_set_only_author( $wp_query ) {
global $current_user;
if( is_admin() && !current_user_can('edit_others_posts') ) {
$wp_query->set( 'author', $current_user->ID );
add_filter('views_edit-post', 'fix_post_counts');
add_filter('views_upload', 'fix_media_counts');
}
}
2. Disabilita la visualizzazione del conteggio dei post di WordPress
Come accennato, il codice sopra indicato disabiliterà solo la visualizzazione dei titoli dei post di altri all'interno della dashboard di WordPress.
Il problema è che non disabiliterà la visualizzazione dei conteggi dei post nelle barre dei filtri "tutti i post", "bozze", "cestino" e "in sospeso". Se desideri correggere anche il conteggio dei post nelle barre dei filtri, aggiungi lo snippet di codice riportato di seguito al file functions.php del tuo tema.
Si noti che il codice seguente funzionerà solo se utilizzato insieme al codice sopra indicato.
function fix_post_counts($views) {
global $current_user, $wp_query;
unset($views['mine']);
$types = array(
array( 'status' => NULL ),
array( 'status' => 'publish' ),
array( 'status' => 'draft' ),
array( 'status' => 'pending' ),
array( 'status' => 'trash' )
);
foreach( $types as $type ) { $query = array(
'author' => $current_user->ID,
'post_type' => 'post',
'post_status' => $type['status']
);
$result = new WP_Query($query);
if( $type['status'] == NULL ):
$class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : ''; $views['all'] = sprintf(__('<a href="/it/%s"'. $class .'>All <span class="count">(%d)</span></a>', 'all'),
admin_url('edit.php?post_type=post'),
$result->found_posts);
elseif( $type['status'] == 'publish' ):
$class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : '';
$views['publish'] = sprintf(__('<a href="/it/%s"'. $class .'>Published <span class="count">(%d)</span></a>', 'publish'),
admin_url('edit.php?post_status=publish&post_type=post'),
$result->found_posts);
elseif( $type['status'] == 'draft' ):
$class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : '';
$views['draft'] = sprintf(__('<a href="/it/%s"'. $class .'>Draft'. ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'),
admin_url('edit.php?post_status=draft&post_type=post'),
$result->found_posts);
elseif( $type['status'] == 'pending' ):
$class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : '';
$views['pending'] = sprintf(__('<a href="/it/%s"'. $class .'>Pending <span class="count">(%d)</span></a>', 'pending'),
admin_url('edit.php?post_status=pending&post_type=post'),
$result->found_posts);
elseif( $type['status'] == 'trash' ):
$class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : '';
$views['trash'] = sprintf(__('<a href="/it/%s"'. $class .'>Trash <span class="count">(%d)</span></a>', 'trash'),
admin_url('edit.php?post_status=trash&post_type=post'),
$result->found_posts);
endif;
}
return $views;}
3. Correggere i conteggi dei supporti
Se vuoi disabilitare anche i conteggi dei media, aggiungi il codice seguente al tuo file functions.php. Affinché questo codice funzioni, assicurati di aggiungere anche il primo codice, ovvero il codice che disabilita la visualizzazione di post e media di altri utenti.
function fix_media_counts($views) {
global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types;
$views = array();
$_num_posts = array();
$count = $wpdb->get_results( "
SELECT post_mime_type, COUNT( * ) AS num_posts
FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_author = $current_user->ID
AND post_status != 'trash'
GROUP BY post_mime_type
", ARRAY_A );
foreach( $count as $row )
$_num_posts[$row['post_mime_type']] = $row['num_posts'];
$_total_posts = array_sum($_num_posts);
$detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] );
if ( !isset( $total_orphans ) )
$total_orphans = $wpdb->get_var("
SELECT COUNT( * )
FROM $wpdb->posts
WHERE post_type = 'attachment'
AND post_author = $current_user->ID
AND post_status != 'trash'
AND post_parent < 1
");
$matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts));
foreach ( $matches as $type => $reals )
foreach ( $reals as $real )
$num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real];
$class = ( empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status']) ) ? ' class="current"' : '';
$views['all'] = "<a href='upload.php'$class>" . sprintf( __('All <span class="count">(%s)</span>', 'uploaded files' ), number_format_i18n( $_total_posts )) . '</a>';
foreach ( $post_mime_types as $mime_type => $label ) {
$class = '';
if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) )
continue;
if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) )
$class = ' class="current"';
if ( !empty( $num_posts[$mime_type] ) )
$views[$mime_type] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), $num_posts[$mime_type] ) . '</a>';
}
$views['detached'] = '<a href="/it/upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';
return $views;
}
E quel signore e signore è un hack di codice che ti consente di mostrare solo i post ei media dell'utente WordPress attualmente connesso.
Controlla se un utente ha effettuato l'accesso a WordPress
Nella modifica del codice sopra, dovevamo verificare se un utente era in grado di modificare i post. Ma se si desidera verificare se un utente ha effettuato l'accesso a WordPress tramite codice, è possibile utilizzare il seguente codice:
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
} else {
echo 'Welcome, visitor!';
};
D'altra parte, se stai cercando un modo semplice per sapere se un utente è connesso al backend, puoi utilizzare il seguente plugin: Logout di WPForce o il plug-in Chi ha effettuato l'accesso.
Hai bisogno di aiuto per fare le cose? Prova questi concerti economici di prim'ordine su Fiverr!
CLICCA QUI per trovare esperti su risolvere i problemi di WordPress.
CLICCA QUI creare un sito web completo di WordPress.
Per favore, lasciare un utile commenta con i tuoi pensieri, quindi condividi questo articolo sui tuoi gruppi di Facebook che lo troverebbero utile e raccogliamo insieme i frutti. Grazie per la condivisione e per essere gentile!
Disclosure: Questa pagina può contenere collegamenti a siti esterni per prodotti che amiamo e consigliamo vivamente. Se acquisti prodotti che ti suggeriamo, potremmo guadagnare una commissione per segnalazione. Tali commissioni non influenzano le nostre raccomandazioni e non accettiamo pagamenti per recensioni positive.