Cómo deshabilitar la visualización de publicaciones y medios de otros usuarios de WordPress
Si alguna vez ha trabajado en un sitio de la comunidad de WordPress respaldado por muchos editores, es posible que haya notado que, aunque no puede editar las publicaciones de otros, aún puede ver los títulos de cada publicación dentro del administrador de WordPress.
Esto se debe a que, de forma predeterminada, WordPress permite a los autores ver los títulos de todas las publicaciones, borradores y medios publicados.
En este tutorial, le mostraremos cómo deshabilitar la visualización de publicaciones y medios de otros usuarios.
Si desea ver más trucos que puede usar con WordPress, asegúrese de consultar algunos de nuestros otros artículos.
Recuerde realizar una copia de seguridad de WordPress (usando estos complementos) antes de continuar en caso de que algo se rompa mientras modifica el código.
Aprende más sobre el uso WP_Query para tipos de publicaciones personalizadas.
1. Desactive la visualización de publicaciones y medios de otros usuarios de WordPress.
Agregue el siguiente código a su archivo functions.php para deshabilitar la visualización de publicaciones y medios de otros usuarios.
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. Deshabilitar la visualización de los recuentos de publicaciones de WordPress
Como se mencionó, el código anterior solo deshabilitará la visualización de títulos de publicaciones de otros dentro del panel de WordPress.
El problema es que no deshabilitará mostrar los recuentos de publicaciones dentro de las barras de filtro 'todas las publicaciones', 'borradores', 'papelera' y 'pendientes'. Si también desea corregir el recuento de publicaciones en las barras de filtro, agregue el siguiente fragmento de código al archivo functions.php de su tema.
Tenga en cuenta que el siguiente código solo funcionará si se utiliza junto con el código anterior.
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="/es/%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="/es/%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="/es/%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="/es/%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="/es/%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. Corrija los recuentos de medios
Si también desea deshabilitar los recuentos de medios, agregue el siguiente código a su archivo functions.php. Para que este código funcione, asegúrese de agregar también el primer código, es decir, el código que deshabilita la visualización de publicaciones y medios de otros usuarios.
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="/es/upload.php?detached=1"' . ( $detached ? ' class="current"' : '' ) . '>' . sprintf( __( 'Unattached <span class="count">(%s)</span>', 'detached files' ), $total_orphans ) . '</a>';
return $views;
}
Y eso, damas y caballeros, es un truco de código que le permite mostrar solo las publicaciones y los medios del usuario de WordPress actualmente conectado.
Compruebe si un usuario está conectado a WordPress
En el ajuste de código anterior, necesitábamos verificar si un usuario podía editar publicaciones. Pero si desea verificar si un usuario está conectado a WordPress a través de un código, puede usar el siguiente código:
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
} else {
echo 'Welcome, visitor!';
};
Por otro lado, si está buscando una forma sencilla de saber si un usuario está registrado en el backend, puede usar el siguiente complemento: Cierre de sesión de WPForce o el complemento Who's Logged In.
¿Necesita ayuda para hacer las cosas? ¡Prueba estos conciertos asequibles mejor calificados en Fiverr!
Haga clic aquí para encontrar expertos en arreglando problemas de WordPress.
Haga clic aquí para crear un sitio web completo de WordPress.
Por favor, deja un eficiente Comente con sus pensamientos, luego comparta esto en su (s) grupo (s) de Facebook que lo encontrarán útil y cosechemos los beneficios juntos. ¡Gracias por compartir y ser amable!
Divulgación: Esta página puede contener enlaces a sitios externos para productos que amamos y recomendamos de todo corazón. Si compra productos que le sugerimos, es posible que ganemos una tarifa de referencia. Tales tarifas no influyen en nuestras recomendaciones y no aceptamos pagos por reseñas positivas.