Ви могли помітити, що на деяких сайтах у записах вказується, що ці пости старі, якщо їм більше чотирьох років. Те саме можна побачити і в директорії плагінів WordPress, коли плагін не оновлювався протягом двох років.
Сьогодні ми спробуємо створити плагін, який відображатиме схожі повідомлення про статус записів, коли посту вже більше Х-років, де «Х» - Це ціле число, що вказує кількість років запису.
Цей плагін дозволить вам самим налаштовувати сповіщення користувача і вказувати кількість років до того, як запис буде вважатися старим.
Цей плагін буде створюватися з підходом об'єктно-орієнтованого програмування, щоб зробити код організованішим, посилаючись на принципи СУХИЙ. Тому вам потрібні знання про об'єктно-орієнтоване програмування, якщо ви хочете зрозуміти цей посібник зі створення плагіна.
Розробка плагіна
Плагін складатиметься з двох захищений властивостей класу та десяти методів. Ці властивості зображені нижче.
- $_notification містить сповіщення, отримані з бази даних, раніше створеної користувачем плагіна.
- $_years містить кількість років, отриманих також із бази даних.
Під час статті ви дізнаєтеся роль кожного методу (відомих як функції у процедурному програмуванні) та їх відповідні коди.
Код плагіна
Для початку додамо шапку плагіна, створимо клас та визначимо властивості:
<?php /* Plugin Name: Alert Post is Old Plugin URI: Description: Display a notification when a post is older than X-years where X is any number of years. Author: Agbonghama Collins Version: 1.0 Author URI: http://tech4sky.com/ */ class AlertOldPost { // stores the notification retrieved from DB protected $_notification; // stores the number of years retrieved from DB protected $_years;
При створенні плагіна в ООП, всі хуки дій та хуки фільтрів можуть бути встановлені в конструкторі, який називається __конструювати. Метод конструктора нашого плагіна складатиметься з п'яти функцій: три хука дій, хук фільтра та функція register_activation_hook.
function __construct() { // Initialize setting options on activation register_activation_hook( __FILE__, array( $this, 'aop_settings_default_values' ) ); // register Menu add_action( 'admin_menu', array( $this, 'aop_settings_menu' ) ); // hook plugin section and field to admin_init add_action( 'admin_init', array( $this, 'pluginOption' ) ); // add the plugin stylesheet to header add_action( 'wp_head', array( $this, 'stylesheet') ); // display notification above post add_filter( 'the_content', array( $this, 'displayNotification' ) ); }
- Функція register_activation_hook вимагає, щоб у цьому методі в плагіні залишалися стандартні налаштування під час активації.
- Наступні три функції add_action вимагають, щоб хук функцій зареєстрували меню плагіна, розділ плагіна та поле для admin_init та додали відповідно таблицю стилів у шапку плагіна.
- Функція add_filter вимагає використання displayNotification метод, який відображає інформацію про те, що запис є старим.
Виходячи з вищезазначеного методу __конструювати, функція displayNotification вимагає, щоб у способі залишалися налаштування плагіна за умовчанням.
public function aop_settings_default_values() { $aop_plugin_options = array( 'notification' => 'This post hasn't been updated in over 2 years.', 'years' => 2 ); update_option( 'apo_alert_old_post', $aop_plugin_options ); }
метод aop_settings_menu створює підменю плагіна під існуючі "Параметри" в меню.
public function aop_settings_menu() { add_options_page( 'Alert Post is Old', 'Alert Post is Old', 'manage_options', 'aop-alert-post-old', array( $this, 'alert_post_old_function' ) ); }
Третій аргумент, що передається у функцію add_options_сторінка є alert_post_old_function методом, за допомогою якого відображається сторінка контенту налаштувань плагіна.
public function alert_post_old_function() { echo '<div class="wrap">'; screen_icon(); echo '<h2>Alert Post is Old</h2>'; echo '<form action="options.php" method="post">'; do_settings_sections('aop-alert-post-old'); settings_fields('aop_settings_group'); submit_button(); }
Щоб додати опції плагіна, потрібно використовувати WordPress API налаштувань для додавання форм налаштувань.
Спочатку визначаємо розділ, додаємо налаштування та нарешті реєструємо налаштування. Все це буде зроблено у методі pluginOption, який був прикріплений до дії admin_init раніше в __конструювати метод.
public function pluginOption() { add_settings_section( 'aop_settings_section', 'Plugin Options', null, 'aop-alert-post-old' ); add_settings_field( 'notification', '<label for="notification">Notification to display when post is old</label>', array( $this, 'aop_notification' ), 'aop-alert-post-old', 'aop_settings_section' ); add_settings_field( 'years', '<label for="years">Number of years for a post to be considered old</label>', array( $this, 'aop_years' ), 'aop-alert-post-old', 'aop_settings_section' ); register_setting( 'aop_settings_group', 'apo_alert_old_post' ); }
Поле налаштувань методу зворотного виклику: aop_notification и aop_years, які заповнюють поле потрібними формами, виглядають так:
public function aop_notification() { $this->databaseValues(); echo '<textarea id="notification" cols="50" rows="3" name="apo_alert_old_post[notification]">'; echo esc_attr( $this->_notification ); echo '</textarea>'; }
public function aop_years() { $this->databaseValues(); echo '<input type="number" id="years" name="apo_alert_old_post[years]" value="' . esc_attr($this -> _years) . '">'; }
Ми отримаємо повідомлення плагіна та налаштування з віком у роках та позначимо їх у дві захищені функції: $_notification и $_years тому, що вони стануть у нагоді, коли нам потрібно буде визначити «вік» запису, а також для відображення повідомлення.
public function databaseValues() { $options = get_option( 'apo_alert_old_post' ); $this->_notification = $options['notification']; $this->_years = $options['years']; }
Код CSS, що використовується для стилю повідомлень, буде використовуватися в таблиця стилів метод.
public function stylesheet() { echo <<<HTML <!-- Alert post is old (author: http://tech4sky.com) --> <style type="text/css"> .oldPost { padding-top: 8px; padding-bottom: 8px; background-color: #FEEFB3; color: #9F6000; border: 1px solid; padding: 4px 12px 8px; margin-bottom: 20px; border-radius: 6px; } span.oldPost { background-color: #9F6000; color: #fff; padding: 1px 10px 0px; border-radius: 20px; font-size: 18px; font-weight: bold; font-family: Verdana; float: left; margin: 0px 8px 0px 0px; } span.oldtext { padding-top: 0px; color: #9F6000; } </style> <!-- /Alert post is old --> HTML; }
І нарешті, функція, яка відображає повідомлення вище над самим контентом, який ми вважаємо «старим», виглядає так:
public function displayNotification( $content ) { global $post; $this->databaseValues(); // get settings year $setYear = $this->_years; // get notification text $notification = $this->_notification; // calculate post age $year = date( 'Y' ) - get_post_time( 'Y', true, $post->ID ); // show notification only on post if ( is_single() ) : if ( $year > $setYear ) { echo '<div class="oldPost">'; echo '<span class="oldPost"> ! </span>'; echo "<span class='oldtext'>$notification</span>"; echo '</div>'; } endif; return $content; }
Декілька слів про вищевказаний код: спочатку ми витягли цифру, яка означає «вік» запису і визначає, що вона стара, і рік, коли вона була написана. Якщо результат перевищує рік, відповідно до якого пост вважається старим, з'являється відповідне повідомлення.
В результаті ми завершили кодування класу плагіна. Щоб клас почав працювати, потрібно його ініціювати так:
new AlertOldPost;
Результат
Ось таке повідомлення відображатиметься над текстом, якщо ваш запис застарів на 2 роки.
Готовий плагін Alert Post is Old
Якщо ви не розібралися зі структурою плагіна, ви можете завантажити готову безкоштовну версію і встановити на свій сайт самостійно.
Коментарі до запису: 0