Ограничение видимости медиафайлов другим пользователям

👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Здравствуйте. Делаю мебельный портал http://sitemurmansk.ru/ (записи — товары, пользователи — мебельные компании)

Что нужно: Без плагинов!

1) Перейменовать поле Имя, биография, заголовок обо мне — в профиле компании.
2) Сделал что бы другим пользователям не показывались чужие записи (товары). Не знаю как сделать тоже самое с медиафайлами.. т.е что бы только тот кто залил медиафайл видел свои фото. Т.е что бы другие компании не могли удалять чужие фото да и видеть вообще. Нашел решение но оно не работает http://mywordpress.ru/support/viewtopic.php?id=22877
3) Так же не получается что бы биография в профиле компании понимала отступы. Ну или визуальный редактор прикрутить тоже не выходит.
4) Так же еще пример загрузки аватара в профиле компании тоже без плагина.

Спасибо.

Создай свой первый сайт на WordPress

WebWolf
Оцените автора
Добавить комментарий

  1. tiaurus

    Слишком много вопросов в одном посте-вопросе. Ознакомьтесь с правилами блога.

    1. Изменить название полей в профиле можно так:

    add_action('admin_head-user-edit.php', 'setup_user_edit');
    
    function setup_user_edit() {
    
        add_filter('gettext', 'change_profile_labels');
    }
    
    function change_profile_labels($input) {
    
        if ('Nickname' == $input)
            return 'Nickname replacement';
    
        if ('Biographical Info' == $input)
            return 'Biographical Info replacement';
    
        return $input;
    }
    

    2. Ответ на второй вопрос — https://n-wp.ru/kak-polzovatelyu-pokazyivat-tolko-ego-mediafaylyi/

    3. Редактор для поля Биография — https://n-wp.ru/test-25/

    4. Аватар загружается автоматически — WordPress использует систему Gravatar, Подробнее об этом — https://n-wp.ru/kak-sdelat-avatar/ Если же вам нужно использовать собственную картинку, закачиваемую на сайт, то воспользуйтесь плагинами, например, WP User Avatar. Поищите по блогу — он выдаст еще несколько аналогичных.

    Ответить
  2. WebWolf автор

    Спасибо за помощь, извините за нарушение.
    1) Не работает.. ничего не изменилось… мне нужен изменить не импут а лейбл. т.е перейменовать на
    2) Спасибо за помощь но скрытие медиа файлов не работает . Ваш пример работает на записях но на медиа почему то нет. Так же показывает у всех и админские и чужие..
    3) Так же биография работает.. вставляю все в fuction и ничего не происходит.. может что то изменилось в последних версиях вордпреса?
    4) На счет аватара использовал Simple Local Avatars все работает но хотелось все же решение без плагина..

    Ответить
    1. tiaurus

      2. У меня работает этот код в functions.php:

      function posts_for_current_author($query) {
        global $user_level;
      
        if($query->is_admin && $user_level < 5) {
          global $user_ID;
          $query->set('author',  $user_ID);
          unset($user_ID);
        }
        unset($user_level);
      
        return $query;
      }
      add_filter('pre_get_posts', 'posts_for_current_author');
      
      
      function wps_get_comment_list_by_user($clauses) {
              if (is_admin()) {
                      global $user_ID, $wpdb;
                      $clauses['join'] = ", ".$wpdb->base_prefix."posts";
                      $clauses['where'] .= " AND ".$wpdb->base_prefix."posts.post_author = ".$user_ID." AND ".$wpdb->base_prefix."comments.comment_post_ID = ".$wpdb->base_prefix."posts.ID";
              };
              return $clauses;
      };
      if(!current_user_can('edit_others_posts')) {
      add_filter('comments_clauses', 'wps_get_comment_list_by_user');
      }
      

      Код действует на выборку постов одного автора в админке, заодно на все медиафайлы и комментарии.

      Ответить
    2. tiaurus

      1. Универсальным способом будет прямое редактирование файла /wp-admin/profile.php, но при обновлении движка нужно будет редактировать файл заново. Либо, как вариант, создать внешнюю страницу профиля с полями, которые вы можете назвать. Например, Front-End Only Users. Но я бесплатные плагины, изменяющие названия полей профиля я не встречал.

      Ответить
    3. tiaurus

      3. Попробуйте Rich Text Biography и Visual Editor Biography.

      Ответить
  3. WebWolf автор

    Спасибо, Нашел только что вот такое решение.

    //Скрываем медиафайлы от разных юзеров
    function my_authored_content($query) {
    //get current user info to see if they are allowed to access ANY posts and pages
    $current_user = wp_get_current_user();
    // set current user to $is_user
    $is_user = $current_user->user_login;
    //if is admin or ‘is_user’ does not equal #username
    if (!current_user_can(‘manage_options’)){
    //if in the admin panel
    if($query->is_admin) {
    global $user_ID;
    $query->set(‘author’, $user_ID);
    }
    return $query;
    }
    return $query;
    }
    add_filter(‘pre_get_posts’, ‘my_authored_content’);

    Ответить
  4. WebWolf автор

    Вот самый лучший код что удалось найти!

    //Скрываем изображения от других пользователей
    add_filter( 'posts_where', 'hide_attachments_wpquery_where' );
    function hide_attachments_wpquery_where( $where ){
    	global $current_user;
    	if( !current_user_can( 'manage_options' ) ) {
    		if( is_user_logged_in() ){
    			if( isset( $_POST['action'] ) ){
    				// library query
    				if( $_POST['action'] == 'query-attachments' ){
    					$where .= ' AND post_author='.$current_user->data->ID;
    				}
    			}
    		}
    	}
    	return $where;
    }
    
    //Скрываем посты от других пользователей.
    function hide_posts_media_by_other($query) {
    	global $pagenow;
    	if( ( 'edit.php' != $pagenow && 'upload.php' != $pagenow   ) || !$query->is_admin ){
    		return $query;
    	}
    	if( !current_user_can( 'manage_options' ) ) {
    		global $user_ID;
    		$query->set('author', $user_ID );
    	}
    	return $query;
    }
    add_filter('pre_get_posts', 'hide_posts_media_by_other');
    Ответить