Останнім часом багато сайтів, що публікують новини та оригінальні статті, застосовують фріміум-модель доступу, згідно з якою незареєстровані відвідувачі сайту обмежені певною кількістю публікацій, які вони можуть прочитати за певний час, зареєстровані же користувачі мають необмежений доступ до всіх публікацій:
код плагіна
Плагін також повинен мати сторінку налаштувань, що містить поле форми. У це поле ми будемо вводити ідентифікатори статей або сторінок, доступ до яких потрібно обмежити.
Код, наведений нижче, додасть в меню «Налаштування» (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]» був підготовлений дружною командою проекту Сайтобудування від А до Я.