Comment désactiver l'affichage des publications et des médias d'autres utilisateurs de WordPress
Si vous avez déjà travaillé sur un site communautaire WordPress pris en charge par de nombreux éditeurs, vous avez peut-être remarqué que même si vous ne pouvez pas modifier les articles des autres, vous pouvez toujours afficher les titres de chaque article dans l'administrateur WordPress.
C'est parce que, par défaut, WordPress permet aux auteurs de voir les titres de chaque article, brouillon et média publié.
Dans ce didacticiel, nous allons vous montrer comment désactiver l'affichage des publications et des médias d'autres utilisateurs.
Si vous souhaitez voir plus d'astuces que vous pouvez utiliser avec WordPress, assurez-vous de consulter certains de nos autres articles.
N'oubliez pas de faire une sauvegarde WordPress (en utilisant ces plugins) avant de continuer au cas où quelque chose se casserait lors de la modification du code.
En savoir plus sur l'utilisation WP_Query pour les types de publication personnalisés.
1. Désactiver l'affichage des publications et des médias d'autres utilisateurs de WordPress
Ajoutez le code ci-dessous à votre fichier functions.php pour désactiver l'affichage des publications et des médias d'autres utilisateurs.
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. Désactiver l'affichage du nombre de publications WordPress
Comme mentionné, le code ci-dessus ne désactivera que l'affichage des titres des publications des autres dans le tableau de bord WordPress.
Le problème est qu'il ne désactivera pas l'affichage du nombre de messages dans les barres de filtre «tous les messages», «brouillons», «corbeille» et «en attente». Si vous souhaitez également corriger le nombre de publications dans les barres de filtre, ajoutez l'extrait de code ci-dessous au fichier functions.php de votre thème.
Veuillez noter que le code ci-dessous ne fonctionnera que s'il est utilisé avec le code ci-dessus.
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="/fr/%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="/fr/%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="/fr/%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="/fr/%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="/fr/%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. Correction du nombre de médias
Si vous souhaitez également désactiver le nombre de médias, ajoutez le code ci-dessous à votre fichier functions.php. Pour que ce code fonctionne, assurez-vous d'ajouter également le premier code, c'est-à-dire le code qui désactive l'affichage des publications et des médias des autres utilisateurs.
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="/fr/upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';
return $views;
}
Et ce mesdames et messieurs est un hack de code qui vous permet de n'afficher que les publications et les médias de l'utilisateur WordPress actuellement connecté.
Vérifier si un utilisateur est connecté à WordPress
Dans le tweak de code ci-dessus, nous devions vérifier si un utilisateur pouvait modifier les publications. Mais si vous souhaitez vérifier si un utilisateur est connecté à WordPress via le code, vous pouvez utiliser le code suivant:
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
} else {
echo 'Welcome, visitor!';
};
En revanche, si vous recherchez un moyen simple de savoir si un utilisateur est connecté au backend, vous pouvez utiliser le plugin suivant: Déconnexion WPForce ou le plugin Who's Logged In.
Besoin d'aide pour faire avancer les choses? Essayez ces concerts abordables les mieux notés sur Fiverr!
Cliquez ici pour trouver des experts sur résoudre les problèmes de WordPress.
Cliquez ici créer un site WordPress complet.
Si vous voulez, vous pouvez laisser un incontournable commentez vos pensées, puis partagez-les sur votre ou vos groupes Facebook qui trouveraient cela utile et récoltons ensemble les avantages. Merci d'avoir partagé et d'être gentil!
Divulgation: Cette page peut contenir des liens vers des sites externes pour des produits que nous aimons et que nous recommandons sans réserve. Si vous achetez des produits que nous suggérons, nous pouvons percevoir des frais de parrainage. Ces frais n'influencent pas nos recommandations et nous n'acceptons pas les paiements pour les avis positifs.