Ви могли помітити, що на деяких сайтах у записах вказується, що ці пости старі, якщо їм більше чотирьох років. Те саме можна побачити і в директорії плагінів 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