Запретить авторам просматривать друг друга.

Я создаю сайт, на котором будет несколько пользователей, таких как Author, владелец не хочет, чтобы авторы могли просматривать сообщения друг друга, так как есть некоторые мета-поля с информацией, которую он, скорее всего, не разделил бы между авторами ,

Есть ли способ удалить возможность просмотра сообщений других авторов?

Спасибо, Чак

Чтобы уточнить немного больше, это для стороны администратора, наверху под сообщениями, есть ссылки на мои, все и опубликованы. Я только хочу, чтобы авторы увидели «мой».

Solutions Collecting From Web of "Запретить авторам просматривать друг друга."

Если вы хотите, чтобы пользователь с ролью «Автор» просматривал сообщения других пользователей на экране обзора (они все равно не смогут просмотреть данные), вы можете добавить дополнительный фильтр для автора:

 add_action( 'load-edit.php', 'wpse14230_load_edit' ); function wpse14230_load_edit() { add_action( 'request', 'wpse14230_request' ); } function wpse14230_request( $query_vars ) { if ( ! current_user_can( $GLOBALS['post_type_object']->cap->edit_others_posts ) ) { $query_vars['author'] = get_current_user_id(); } return $query_vars; } 

Маленькие ссылки над столбиком («Mine», «All», «Drafts») теперь менее полезны, вы также можете удалить их:

 add_filter( 'views_edit-post', 'wpse14230_views_edit_post' ); function wpse14230_views_edit_post( $views ) { return array(); } 

Именно это делает роль «автор» по умолчанию. http://codex.wordpress.org/Roles_and_Capabilities

Просто проверьте возможности (см. Ссылку из @Wyck) и идентификатор автора внутри ваших шаблонов и поместите материал, который вы не хотите, чтобы другие видели внутри проверки if / else:

 // Get the author of this post: $post_author = get_query_var('author_name') ? get_user_by( 'slug', get_query_var('author_name') ) : get_userdata( get_query_var('author') ); // Get data from current user: global $current_user; get_currentuserinfo(); // Get the display_name from current user - maybe you have to exchange it with $current_user->user_login $current_author = $current_user->display_name; // Check the capability and if the currently logged in user is the the post author if ( current_user_can('some_capability') && $post_author == $current_author ) { // Post Meta $post_meta = get_post_meta( $GLOBALS['post']->ID ); // DO OR DISPLAY STUFF HERE } 

Я должен был сделать что-то подобное сегодня, и именно поэтому я нашел этот пост. То, что я нашел, что сработало для меня, – это сообщение под названием « Как ограничить авторов своими сообщениями в WordPress Admin » от wpbeginner

Вот код, который вы можете вставить на своих functions.php:

 function posts_for_current_author($query) { global $pagenow; if( 'edit.php' != $pagenow || !$query->is_admin ) return $query; if( !current_user_can( 'edit_others_posts' ) ) { global $user_ID; $query->set('author', $user_ID ); } return $query; } add_filter('pre_get_posts', 'posts_for_current_author'); 

Посмотрите здесь, чтобы получить более полное решение (чтобы также зафиксировать количество сообщений на панели фильтров): помощь в конденсировании / оптимизации рабочего кода