Як обмежити доступ до контенту незареєстрованим користувачам, cms і движки для сайтів

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

Як обмежити доступ до контенту незареєстрованим користувачам, cms і движки для сайтів

код плагіна

Плагін також повинен мати сторінку налаштувань, що містить поле форми. У це поле ми будемо вводити ідентифікатори статей або сторінок, доступ до яких потрібно обмежити.

Код, наведений нижче, додасть в меню «Налаштування» (Settings) підміню під назвою «Обмежити доступ незареєстрованим користувачам» (Restrict content to registered users):

П'ятий аргумент, rcru_content_user_settings. переданий функції add_options_page () - це функція, яка виводить вміст сторінки налаштувань плагіна. Її код:

Форма поки не має поля для введення і не може зберегти дані в базі, так як нам ще тільки належить реалізувати функцію Settings API WordPress.

Функція plugin_option () визначає секцію і поле для налаштувань:

Аналогічно попередньому прикладу, третій аргумент, який передається функції
add_settings_field (). - post_page_field - функція, що виводить поле форми:

Нарешті, функція plugin_option () прив'язується до admin_init. щоб наша форма почала працювати:

Ми розібралися зі сторінкою налаштування плагіна, але дані, які ми зберігаємо на цьому етапі, поки ніяк не використовуються.

Тепер нам потрібно написати функцію restrict_content_register_user (). яка буде витягати з бази даних ідентифікатори статей або сторінок, які були збережені на попередньому етапі.

Ці дані будуть використовуватися для того, щоб переконатися в тому, що користувач зареєстрований, інакше буде виводитися попередження з пропозицією зареєструватися.

Нарешті, ця функція буде прив'язана до фільтру content. щоб реагувати на зміну сторінки (статті):

Ми закінчили з реалізацією основного функціоналу нашого плагіна: через сторінку налаштувань. Тепер залишилося додати метабокс і шорткод.

Додавання МЕТАБОКС

Додавання панелі-МЕТАБОКС на сторінки редагування контенту дозволить обмежувати доступ до контенту прямо при його створенні або редагуванні, без необхідності звертатися до сторінці налаштувань. Для цього функцію rcru_mb_create (). яка буде створювати наш метабокс, потрібно прив'язати до події add_meta_boxes:

Функція rcru_mn_function () містить чекбокс і опис МЕТАБОКС:

Функція rcru_mb_save_data () зберігає значення, задані в МЕТАБОКС, в базу даних відповідно до налаштувань безпеки:

Функція restrict_content_metabox () перевірить статтю або сторінку на вже наявні обмеження, перевірить реєстрацію користувача і при необхідності видасть незареєстрованим користувачам попередження:

Додавання шорткода

За допомогою шорткода можна обмежити доступ до частини статті.

Функція rcru_user_shortcodes () містить виклик add_shortcode (). який здійснює прив'язку нашої Callback-функції до шорткод-тегом [rcru-private]. Callback -функція передається в другому параметрі add_shortcode (). як в попередніх прикладах:

Потім ця функція реєструється в подію init, щоб WordPress пустив її в справу:

Робота плагіна

Так виглядає сторінка налаштувань плагіна з полем, в яке можна ввести ідентифікатори статей або сторінок, розділені комами:

Метабокс на сторінці редагування контенту

Весь код, використаний в статті, можна знайти тут. Успіхів!

Переклад статті «How To Restrict Content To Registered Users [WP Plugin Tutorial]» був підготовлений дружною командою проекту Сайтобудування від А до Я.