Java, UX, HTML, CSS, WEB-design

Ограничение видимости сообщений в WordPress с помощью имен пользователей

Краткое описание по статье Ограничение видимости сообщений в WordPress с помощью имен пользователей

Название: Ограничение видимости сообщений в WordPress с помощью имен пользователей . Краткое описание: [ad_1] ⭐ Крис Эл . Дата публикации: 19.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

[ad_1]

  • Крис Эллисон

  • 0 Комментарии

Ограничение видимости сообщений в WordPress с помощью имен пользователей

  • 12 минут чтения

  • WordPress, настраиваемые поля, функции

Краткое резюме ↬

После установки системы контролировать, кто может просматривать сообщения, несложно. Ограничение доступа для определенных пользователей имеет несколько преимуществ, начиная от дизайн-студии, распространяющей работы среди различных клиентов, и заканчивая небольшой школой, организующей размещение домашних заданий своих учеников в Интернете с помощью дешевого и простого решения.

Самый простой способ заставить эту систему работать — сделать получателей информации «подписчиками» (поскольку им не нужно публиковать сообщения), а распространителей информации — «авторами» (поскольку они должны иметь возможность редактировать только свои собственные сообщения). . Эта система устраняет несколько головных болей для владельца веб-сайта за счет управление тем, кто имеет доступ к определенным сообщениям. Имя пользователя будет использоваться для определения того, кому разрешено просматривать определенные сообщения, поскольку оно уникально и по большей части постоянно.

Основы

Что вам понадобится?

  • WordPress 3.1 или новее
  • Участники различных ролей
  • Возможность изменять файлы вашей темы
  • Базовые знания PHP и MySQL

Еще после прыжка! Продолжить чтение ниже ↓

Что такое имя пользователя?

В общем, имя пользователя — это средство идентификации и проверки пользователя. Это не единственный способ идентифицировать пользователя, но человеку, вошедшему в систему, легче запомнить имя пользователя, чем запоминать случайный идентификатор пользователя. Имя пользователя можно сделать уникальным для отдельного человека, в отличие от имени человека или адреса электронной почты (члены семьи могут иметь одно и то же имя или даже один и тот же адрес электронной почты). Именно благодаря этой простоте использования и уникальности имена пользователей используются на большинстве веб-сайтов, которые требуют от людей регистрации для доступа к веб-сайту или определенным его функциям.

Дальнейшее чтение на SmashingMag:

  • Использование ролей пользователей в WordPress
  • Как стать лучшим профессионалом WordPress
  • Полезные инструменты, темы и плагины WordPress
  • Создание веб-сайтов, оптимизированных для мобильных устройств, с помощью WordPress

Для WordPress имя пользователя — это средство идентификации пользователя. В сочетании с паролем имя пользователя позволяет кому-либо получить доступ к своему профилю и, в зависимости от его разрешений в WordPress, доступ к административным страницам веб-сайта. Имя пользователя может использоваться для многих функций в работе и управлении веб-сайтом, таких как карма, престиж, роли пользователей и исключение.

Имя пользователя WordPress уникально и не может быть изменено обычным пользователем. Таким образом, система является потенциально надежным средством идентификации личности. Эта надежность важна для системы, в которой запись должна быть видна только нескольким людям. Разрешения публикации не должны меняться только потому, что кто-то изменил свое имя или адрес электронной почты.

Скриншот страницы одного пользователя WordPress
Страница пользователя в установке WordPress. Обратите внимание, что «Имена пользователей не могут быть изменены».

Настройка серверной части

Для того, чтобы автор мог устанавливать разрешения на видимость, на странице редактирования поста должен быть настроен способ выбора пользователей. Мы можем сделать это одним из нескольких способов, одним из самых простых и эффективных из которых является создание мета-блока (или виджета) на странице редактирования поста, который позволяет автору добавлять пользовательскую информацию в соответствии с требованиями темы или плагина. . Эта информация позволяет нам сообщить теме, какие участники должны иметь права просмотра определенных сообщений.

Базовый настраиваемый метабокс

В статье Джастина Тэдлока «Как создавать пользовательские мета-боксы записей в WordPress» объясняется, как создавать мета-боксы, и мы будем повторно использовать этот код здесь.

Предположим, мы имеем дело с веб-сайтом музыкальной школы под названием «Fancy Flautists Smashing Magazine». Мы будем использовать имя smashing_flautist_access в коде серверной части, чтобы отличить ее от других пользовательских функций. Код Джастина — отличная отправная точка для этого проекта, но для наших целей его нужно немного настроить. Поместите следующий код в папку вашей темы functions.phpи измените различные метки в соответствии с вашим проектом.

/* Fire our meta box setup function on the post editor screen. */
add_action( 'load-post.php', 'smashing_post_meta_boxes_setup' );
add_action( 'load-post-new.php', 'smashing_post_meta_boxes_setup' );

/* Meta box setup function. */
function smashing_post_meta_boxes_setup() {

   /* Add meta boxes on the 'add_meta_boxes' hook. */
   add_action( 'add_meta_boxes', 'smashing_add_post_meta_boxes' );

   /* Save post meta on the 'save_post' hook. */
   add_action( 'save_post', 'smashing_flautist_access_save_meta', 10, 2 );
}

/* Create one or more meta boxes to be displayed on the post editor screen. */
function smashing_add_post_meta_boxes() {

   add_meta_box(
      'smashing-flautist-access',         // Unique ID
      esc_html__( 'Post Viewing Permission', 'smashing_flautist' ),     // Title
      'smashing_flautist_access_meta_box',      // Callback function
      'post',              // Admin page (or post type)
      'normal',               // Context
      'default'               // Priority
   );
}

/* Display the post meta box. */
function smashing_flautist_access_meta_box( $object, $box ) { ?>

   <?php wp_nonce_field( basename( __FILE__ ), 'smashing_flautist_access_nonce' ); ?>

   <p>
      <label for="smashing-flautist-access"><?php _e( "Enter the username of the subscriber that you want to view this content.", 'smashing_flautist' ); ?></label>
      <br />
      <input class="widefat" type="text" name="smashing-flautist-access" id="smashing-flautist-access" value="<?php echo esc_attr( get_post_meta( $object->ID, 'smashing_flautist_access', true ) ); ?>" size="30" />
   </p>
<?php }

С кодом Джастина, модифицированным для этого проекта, у нас должно получиться собственное мета-окно, которое выглядит так:

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

Добавление легкости к выделению

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

<table class="smashing-flautist-access">
<tr align="left">
<th>Username</th>
<th>    </th>
<th>Visiblity</th>
<th>    </th>
<th>Name</th>
</tr>
<?php
global $post;
   $users = get_users('role=subscriber');
   foreach ($users as $user) {
         $user_info = get_userdata( $user->ID );
         if(get_post_meta( $object->ID, 'smashing_flautist_access', true ) == $user->user_login) $ifchecked = 'checked="checked" ';
         echo "<tr>";
         echo "<td>$user->user_login</td><td>    </td>";
         echo "<td align="center"><input type="radio" name="smashing-flautist-access" id="smashing-flautist-access" value="$user->user_login" " . $ifchecked ."/></td><td>    </td>";
         echo "<td>$user_info->last_name, $user_info->first_name</td><td>    </td>";
         echo "</tr>";
         unset($ifchecked);

   } ?></table>

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

Скриншот метабокса с информацией о пользователе
Метаполе, содержащее метод для выбора конкретного имени и информации о каждом пользователе.

Сохранение списка

Теперь, когда мы создали список, который позволяет авторам легко выбирать, каких участников они хотят иметь возможность просматривать определенные сообщения, мы должны создать систему для добавления списка в базу данных WordPress MySQL, чтобы мы могли получить его позже. . Нам также нужен способ сообщить WordPress обновить этот список имен пользователей на случай, если позже автор решит добавить или удалить кого-то из списка авторизованных зрителей определенного сообщения. Код, предоставленный Джастином, отлично работает; поместите его код ниже в вашей теме functions.phpсразу после функции, устанавливающей пользовательское мета-поле.

/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'smashing_flautist_access_save_meta', 10, 2 );

/* Save the meta box's post metadata. */
function smashing_flautist_access_save_meta( $post_id, $post ) {

   /* Make all $wpdb references within this function refer to this variable */
   global $wpdb;

   /* Verify the nonce before proceeding. */
   if ( !isset( $_POST['smashing_flautist_access_nonce'] ) || !wp_verify_nonce( $_POST['smashing_flautist_access_nonce'], basename( __FILE__ ) ) )
      return $post_id;

   /* Get the post type object. */
   $post_type = get_post_type_object( $post->post_type );

   /* Check if the current user has permission to edit the post. */
   if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
      return $post_id;

   /* Get the posted data and sanitize it for use as an HTML class. */
   $new_meta_value = ( isset( $_POST['smashing-flautist-access'] ) ? sanitize_html_class( $_POST['smashing-flautist-access'] ) : ’ );

   /* Get the meta key. */
   $meta_key = 'smashing_flautist_access';

   /* Get the meta value of the custom field key. */
   $meta_value = get_post_meta( $post_id, $meta_key, true );

   /* If a new meta value was added and there was no previous value, add it. */
   if ( $new_meta_value && ’ == $meta_value )
      {
      add_post_meta( $post_id, $meta_key, $new_meta_value, true );
      $wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_status="private" WHERE ID = ".$post_id." AND post_type="post""));
      }
   /* If the new meta value does not match the old value, update it. */
   elseif ( $new_meta_value && $new_meta_value != $meta_value )
      {
      update_post_meta( $post_id, $meta_key, $new_meta_value );
      $wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_status="private" WHERE ID = ".$post_id." AND post_type="post""));
      }
   /* If there is no new meta value but an old value exists, delete it. */
   elseif ( ’ == $new_meta_value && $meta_value )
      {
      delete_post_meta( $post_id, $meta_key, $meta_value );
      $wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_status="public" WHERE ID = ".$post_id." AND post_type="post""));
      }
}

Три запроса MySQL позволяют предотвратить просмотр защищенных сообщений неавторизованными пользователями и скрыть сообщения из RSS-каналов. Первый запрос выполняется только тогда, когда новые данные заполняют ранее пустое настраиваемое поле, а второй запрос выполняется только тогда, когда данные в настраиваемом поле изменились. Третий запрос выполняется только в том случае, если настраиваемое поле пусто, и он устанавливает видимость сообщения обратно на «Общедоступный». Все три защищены от атак SQL-инъекций с помощью $wpdb->prepare() для проверки данных, введенных в поле формы имени пользователя.

Если вам не нравится, что WordPress предшествует заголовку поста словом «Частный», добавьте следующий код в файл вашей темы. functions.php файл. Эта пользовательская функция вызывается, когда ваша тема должна отображать заголовок сообщения; он находит любые экземпляры слов «Защищено» или «Частное» в начале заголовка и удаляет их. В основе программирования WordPress лежит функция get_the_title() добавляет эти слова, если видимость сообщения ограничена и человек, который просматривает, не является администратором. Что делает следующий код, так это отправляет сообщение действию, которое get_the_title() подключается, предлагая ему удалить термины «Защищено:» и «Частное:» из заголовка. Таким образом, вы можете установить заголовок сообщения, начинающийся с любого термина, и заголовок не будет изменен; этот код влияет только на способность WordPress добавлять к вашему заголовку.

function smashing_title_trim($title) {
   $title = attribute_escape($title);
   $needles = array(__('Protected: '),__('Private: '));
   $title = str_replace($needles,’,$title);
   return $title;
}
add_filter('protected_title_format','smashing_title_trim');
add_filter('private_title_format','smashing_title_trim');

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

$subRole = get_role( 'subscriber' );
$subRole->add_cap( 'read_private_posts' );

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

$subRole->add_cap( 'read_private_pages' );

Настройка внешнего интерфейса

Теперь, когда у нас есть способ добавить участников в список людей, которые могут просматривать определенный пост, нам нужно изменить нашу тему, чтобы использовать эти данные и фактически контролировать видимость каждого поста на основе этого списка. Во-первых, нам нужен способ получить имя пользователя, который может просматривать сообщение. Во-вторых, мы бы сравнили имя пользователя участника с разрешениями на просмотр для пользователя, который в данный момент вошел в систему. Наконец, мы бы заставили тему отображать либо сообщение в цикле, либо сообщение об ошибке (или, возможно, вообще ничего).

Поместите этот код сразу после запуска Цикла. Он входит single.php, category.php а также index.php если вы будете отображать сообщения на главной странице.

<?php
/* Get the post's acceptable viewer. */
      $flautist_access = get_post_meta($post->ID, 'smashing_flautist_access', true );
/* Get the post's current viewer, if he or she is logged in. */
      if(is_user_logged_in()) {$current_flautist = $current_user->user_login;}
/* See if the acceptable viewer and the current viewer are the same */
      if($flautist_access == $current_flautist || current_user_can('author') || current_user_can('editor') || current_user_can('administrator'))
         {echo ’; ?>

Поместите этот код непосредственно перед окончанием цикла. Здесь вы можете показать сообщение об ошибке, говорящее пользователю, что он не может просматривать этот пост. Или вы можете оставить этот код как есть, чтобы он выглядел так, как будто текущий посетитель ничего не пропустил.

<?php } else { echo ’; } ?>

Вот как скрытое сообщение выглядит для публики или пользователя, который не вошел в систему. Они увидят то, что кажется сообщением об ошибке, и будут перенаправлены от сообщения.

Что видит публика при попытке просмотреть защищенный пост
Если человек не вошел в систему и попытается просмотреть сообщение с ограниченным доступом, он получит сообщение об ошибке.

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

Что видит авторизованный пользователь при попытке просмотра защищенного поста
Если участник вошел в систему и авторизован для просмотра защищенного сообщения, то он увидит само сообщение.

Заключение

Возможность контролировать, кто может просматривать отдельные сообщения, — полезная функция для самых разных приложений. Стороннее программное обеспечение изначально может делать это, но WordPress широко поддерживается и задокументирован, а это означает, что любые дыры в безопасности, которые могут позволить неавторизованным пользователям просматривать ограниченные сообщения, будут закрыты в будущем обновлении. Кроме того, он позволяет вам вести настоящий блог рядом с сообщениями с ограниченной видимостью. Эта система может использоваться администраторами для распространения персонализированного контента, профессионалами для отправки файлов клиентам или блоггерами для ограничения видимости определенных сообщений для определенных участников.

Предоставление автору возможности контролировать, кто может просматривать его сообщения, может помочь ему адаптировать содержание блога к потребностям или вкусам определенных пользователей. В конечном итоге вам придется учитывать цель и содержание вашего веб-сайта при принятии решения об использовании этого метода. Это не для всех, но подходит владельцам небольших веб-сайтов, которые хотят предоставлять определенный контент определенным людям.

Ресурсы

  • «Справочник по функциям/добавить мета-поле», WordPress Codex
  • «Справочник по функциям/привлечение пользователей», WordPress Codex
  • «Роли и возможности», WordPress Codex
  • «Справочник классов/wpdb», WordPress Codex
  • «Как создавать пользовательские мета-боксы записей в WordPress», Джастин Тэдлок
Сокрушительная редакция
(аль)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Ограничение видимости сообщений в WordPress с помощью имен пользователей

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

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

Ваш адрес email не будет опубликован.

Кнопка «Наверх»