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

Если вы не разобрались со структурой плагина, вы можете скачать его готовую бесплатную версию и установить на свой сайт самостоятельно.

Источник: code.tutsplus.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.