Как ограничить содержание для зарегистрированных пользователей [WP Plugin Tutorial]


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

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

Кодирование плагина

При написании плагина WordPress в разделе заголовка (блока комментариев PHP) содержится такая информация, как имя, описание, автор и URL автора плагина.
Вот заголовок плагина:
<? PHP
/ *
Имя плагина: ограничить контент для зарегистрированных пользователей
URI плагина: http://hongkiat.com
Описание: доступ к контенту только зарегистрированным пользователям
Версия: 0.1
Автор: Агбонгама Коллинз
URI автора: http://tech4sky.com
* /

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

Приведенный ниже код добавит подменю «Настройки» под названием «Ограничить содержимое зарегистрированному пользователю».
add_action (‘admin_menu’, ‘rcru_plugin_menu’);
// Добавление подменю в настройки
function rcru_plugin_menu () {
add_options_page (
«Ограничить содержание зарегистрированным пользователем»,
«Ограничить содержание зарегистрированным пользователем»,
‘manage_options’,
‘Rcru-ограничение-контент пользователя’,
‘rcru_content_user_settings’
);
}
Пятый аргумент rcru_content_user_settings, переданный на страницу add_options_page выше, является функцией, которая будет выводить содержимое для настроек плагина.

function rcru_content_user_settings () {
эхо

<

div class=”wrap”>«;
screen_icon ();
эхо

Ограничить содержание для зарегистрированного пользователя

«;
эхо

<

form action=”options.php” method=”post”>«;
do_settings_sections ( ‘rcru-ограничение-контент пользователя’);
settings_fields ( ‘rcru_settings_group’);
submit_button ();
}

В форме не хватает поле, и он пока не способен сохранять данные в базу данных, потому что нам еще предстоит реализовать WordPress API настроек,

Функция plugin_option определяет раздел настроек и поле.

// поле плагина и разделы
function plugin_option () {
add_settings_section (
‘Rcru_settings_section’,
«Параметры плагинов»,
значение NULL,
«Rcru-ограничение-контент пользователь
«);

add_settings_field (
«Пост-страничный-идентификатор»,
»,
‘Post_page_field’,
‘Rcru-ограничение-контент пользователя’,
‘Rcru_settings_section’
);

// зарегистрируем настройки
register_setting (‘rcru_settings_group’, ‘rcru_post-id-option’);

Напоминаем, что третий аргумент post_page_field, переданный функции add_settings_field выше, вызывается для отображения формы поле.
function post_page_field () {
echo “Введите идентификатор сообщения или страницы через запятую.”;
эхо«;

}

Функция plugin_option наконец-то подключается к действию admin_init, чтобы привести его в действие.

add_action (‘admin_init’, ‘plugin_option’);

Мы закончили с созданием страницы настроек плагина, но зачем использовать данные, сохраненные страницей настроек в базе данных, если они не будут использоваться?

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

Наконец, функция будет подключена к фильтру the_content, чтобы повлиять на изменение сообщения или страницы.
функция restrict_content_register_user ($ content) {
глобальный $ post;
$ post_database = get_option (‘rcru_post-id-option’);
$ post_database = explode (‘,’, $ post_database);
$ current_user = wp_get_current_user ();

/ * Если контента нет, вернитесь. * /
if (is_null ($ content))
вернуть $ content;

foreach ($ post_database как $ posts) {
$ posts = trim ($ posts);
if ($ posts == $ post -> ID) {
if (username_exists ($ current_user -> user_login)) {

/ * Вернуть приватный контент. * /
вернуть $ content;
} еще {

/ * Вернуть альтернативное сообщение. * /
возвращение ‘

Вы должны быть зарегистрированным пользователем, чтобы читать этот контент.

Зарегистрируйтесь здесь

«;
}

}
}
вернуть $ content;
}
add_filter (‘the_content’, ‘restrict_content_register_user’);

Теперь мы закончили с первым способом работы плагина: использование страницы настроек плагина.

Осталось добавить метабокс и шорткод в плагин.
Добавление Metabox
Добавление метабокса, содержащего флажок на экранах редактирования сообщений и страниц, позволит ограничить этот пост или страницу зарегистрированным пользователем, если флажок установлен. Функция rcru_mb_create будет включать мета-бокс во всех сообщениях и страницах при подключении к действию add_meta_boxes.

function rcru_mb_create () {
/ **
* @array $ экранов Запись экрана для отображения мета-окна
* @ значения пост, страница, панель инструментов, ссылка, вложение, custom_post_type
* /
$ экранов = массив (
‘после’,
«Страница»
);
foreach ($ экранов как $ экран) {
add_meta_box ( ‘rcru-мета’,
«Ограничить пост / страницу»,
‘Rcru_mb_function’,
$ Экрана,
‘нормальный’,
‘высокая’);
}
}
add_action (‘add_meta_boxes’, ‘rcru_mb_create’);

Функция rcru_mb_function содержит флажок и описание метабокса.

function rcru_mb_function ($ post) {

// извлекаем значения метаданных, если они существуют
$ restrict_post = get_post_meta ($ post -> ID, ‘_rcru_restrict_content’, true);

// Добавить одноразовое поле, чтобы мы могли проверить его позже при проверке
wp_nonce_field (‘rcru_inner_custom_box’, ‘rcru_inner_custom_box_nonce’);

эхо


Проверка этого параметра ограничит этот пост только зарегистрированными пользователями.

«;
}

Функция rcru_mb_save_data выполняет проверку безопасности и сохранение значений формы в базе данных.

function rcru_mb_save_data ($ post_id) {
/ *
* Нам нужно убедиться, что это пришло с нашего экрана и с соответствующей авторизацией,
* потому что save_post может быть запущен в другое время.
* /

// Проверяем, установлен ли наш одноразовый номер.
if (! isset ($ _ POST[‘rcru_inner_custom_box_nonce’]))
return $ post_id;

$ nonce = $ _POST[‘rcru_inner_custom_box_nonce’];

// Убедитесь, что одноразовый номер действителен.
if (! wp_verify_nonce ($ nonce, ‘rcru_inner_custom_box’))
return $ post_id;

// Если это автосохранение, наша форма не была отправлена, поэтому мы не хотим ничего делать.
если (определено (‘DOING_AUTOSAVE’) && DOING_AUTOSAVE)
return $ post_id;

// Проверка прав пользователя.
if (‘page’ == $ _POST[‘post_type’]) {

if (! current_user_can (‘edit_page’, $ post_id))
return $ post_id;
} еще {

if (! current_user_can (‘edit_post’, $ post_id))
return $ post_id;
}

/ * ОК, теперь мы можем сохранить данные. * /

// Если старые записи существуют, получить их
$ old_restrict_post = get_post_meta ($ post_id, ‘_rcru_restrict_content’, true);

// Дезинфицировать пользовательский ввод.
$ restrict_post = sanitize_text_field ($ _ POST[‘rcru_restrict_content’]);

// Обновляем метаполе в базе данных.
update_post_meta ($ post_id, ‘_rcru_restrict_content’, $ restrict_post, $ old_restrict_post);

}

// ловушка для сохранения данных метабокса
add_action (‘save_post’, ‘rcru_mb_save_data’);

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

функция restrict_content_metabox ($ content) {
глобальный $ post;
// извлекаем значения метаданных, если они существуют
$ post_restricted = get_post_meta ($ post -> ID, ‘_rcru_restrict_content’, true);

// если у поста или страницы есть ограничение и пользователь не зарегистрирован
// отображаем сообщение об ошибке
if ($ post_restricted == 1 && (! username_exists (wp_get_current_user () -> user_login))) {

возвращение ‘

Вы должны быть зарегистрированным пользователем, чтобы читать этот контент.

Зарегистрируйтесь здесь

«;
}

вернуть $ content;

}

// подключаем функцию к содержимому публикации, чтобы внести изменения
add_filter (‘the_content’, ‘restrict_content_metabox’);

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

Функция rcru_user_shortcodes содержит функцию ловушки шорткода add_shortcode, которая определяет тег шорткода [rcru-private],
Второй аргумент, передаваемый add_shortcode, является функцией обратного вызова, которая вызывается, когда используется короткий код.

/ * Функция регистрации шорткода. * /
function rcru_user_shortcodes () {

/ * Добавляет [rcru-private] короткий код. * /
add_shortcode (‘rcru-private’, ‘rcru_shortcode’);
}

Затем функция регистрируется для действия init, поэтому она будет распознаваться внутренними компонентами WordPress.

/ * Зарегистрировать шорткоды в ‘init’. * /
add_action (‘init’, ‘rcru_user_shortcodes’);

Наконец, функция обратного вызова rcru_shortcode обрабатывает вывод шорткода.

/ * Функция для обработки вывода шорткода. * /
function rcru_shortcode ($ attr, $ content = ”) {

/ * Проверить, имеет ли текущий пользователь возможность read_private_content. * /
$ current_reader = wp_get_current_user ();
if (! username_exists ($ current_reader -> user_login)) {

/ * Вернуть альтернативное сообщение. * /
возвращение ‘

Вы должны быть зарегистрированным пользователем, чтобы читать этот контент.

Зарегистрируйтесь здесь

«;
}
}

Как работает плагин

Плагин будет иметь страницу настроек с полем формы, в котором идентификаторы Post & Page могут быть ограничены и разделены запятой.

Чтобы ограничить данный пост или страницу, введите их соответствующие идентификаторы, разделенные запятой (,) в поле формы. Чтобы получить идентификатор сообщения, перейдите на экран редактирования сообщения (редактор TinyMCE для записи содержимого сообщения) и посмотрите URL-адрес страницы. Число, добавленное к? Post =, является идентификатором сообщения.

Например, для http://wordpress.dev/wp-admin/post.php?post=88&action=edit число 88 – это идентификатор сообщения или страницы.
Metabox на экране редактирования сообщений и страниц
Публикация или страница также могут быть ограничены для зарегистрированных пользователей, если установить флажок «Ограничить содержимое», расположенный в метабоксе (добавляемый плагином на экран редактирования поста).

Короткий код
Часть или раздел содержимого сообщения или страницы могут быть скрыты от публичного просмотра и отображаться только зарегистрированным пользователям с использованием короткого кода плагина, например:
[rcru-private]Часть содержимого поста или страницы должна быть доступна только зарегистрированным пользователям.[/rcru-private]

Наконец, вот ссылка на файл плагина, Не стесняйтесь исследовать код и счастливое кодирование!

Примечание редактора: этот пост написан Коллинзом Агбонгхама для Hongkiat.com. Agbonghama – веб-разработчик днем ​​и независимый писатель / блогер ночью. Когда он не спорит с кодом, он любит спать на диване и писать в своем личном блоге. w3guy.com, Вы можете найти его на facebook а также G +,


0 Comments

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