Вы могли заметить, что на некоторых сайтах в записях указывается, что эти посты старые, если им более четырех лет. То же самое можно увидеть и в директории плагинов WordPress, когда плагин не обновлялся в течение двух лет.
Сегодня мы попытаемся создать плагин, который будет отображать похожие уведомления о статусе записей, когда посту уже более Х-лет, где «Х» — это целое число, указывающее количество лет записи.
Этот плагин позволит вам самим настраивать пользовательские уведомления и указывать количество лет до того, как запись будет считаться старой.
Этот плагин будет создаваться с подходом объектно-ориентированного программирования, чтоб сделать код более организованным, ссылаясь на принципы DRY. Поэтому вам нужны будут знания об объектно-ориентированном программировании, если вы хотите понять это руководство по созданию плагина.
Разработка плагина
Плагин будет состоять из двух protected свойств класса и десяти методов. Эти свойства изображены ниже.
- $_notification содержит уведомления, полученные из базы данных, ранее созданной пользователем плагина.
- $_years содержит количество лет, полученных также из базы данных.
По ходу статьи вы узнаете роль каждого метода (известных как функции в процедурном программировании) и их соответствующие коды.
Код плагина
Для начала добавим шапку плагина, создадим class и определим свойства:
<?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;
При создании плагина в ООП, все хуки действий и хуки фильтров могут быть установлены в конструкторе, который называется __construct. Метод конструктора нашего плагина будет состоять из пяти функций: три хука действий, хук фильтра и функция 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 метода, который отображает информацию о том, что запись является старой.
Исходя из вышеупомянутого метода __construct, функция 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_page является 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 Settings API для добавления форм настроек.
Сначала определяем раздел, добавляем настройки и наконец регистрируем настройки. Все это будет сделано в методе pluginOption, который был прикреплен к действию admin_init ранее в __construct методе.
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, используемый для стиля уведомлений, будет использоваться в stylesheet методе.
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