chuck
  • 0
Новичок

Запретить авторам просматривать сообщения друг друга

  • 0

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

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

Спасибо, Чак

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

Share
  1. Вы говорите об административной или общедоступной стороне вашего сайта? (Используйте @Jan, когда вы отвечаете в комментарии, и я получаю уведомление)

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

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

    Маленькие ссылки над таблицей сообщений («Мои», «Все», «Черновики») теперь менее полезны, их тоже можно убрать:

    add_filter( 'views_edit-post', 'wpse14230_views_edit_post' );
    function wpse14230_views_edit_post( $views )
    {
        return array();
    }
    
    • 0
  3. Это именно то, что делает роль «автор» по умолчанию. http://codex.wordpress.org/Roles_and_Capabilities

    • 0
  4. Просто проверьте возможности (см. ссылку от @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
    }
    
    • 0
  5. Мне нужно было сделать что-то подобное сегодня, и именно поэтому я нашел этот пост. То, что я обнаружил, сработало для меня, так это этот пост под названием: « Как ограничить авторов их собственными сообщениями в администраторе WordPress » от 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');
    
    • 0
  6. Посмотрите здесь более полное решение (чтобы также исправить количество сообщений на панели фильтров): Помогите сжать/оптимизировать некоторый рабочий код.

    • 0

Оставить ответ

You must login to add an answer.