В то время как темы изменить внешний вид вашего сайта, плагины изменить, как она функционирует. С помощью плагинов можно создавать пользовательские типы постов, добавлять новые таблицы в базу данных для отслеживания популярных статей, автоматически связывать папку содержимого с серверомCDN,таким как Amazon S3… вы получите картину.
Дальнейшее чтение на SmashingMag:
- Десять вещей, каждый WordPress Plugin Разработчик должен знать
- Создание WordPress Плагин, который использует услугу AIS
- Как коммерческие разработчики плагинов используют репозиторий
- Как улучшить ваш WordPress Плагин в Readme.txt
Тема или Плагин?
Если вы когда-либо играли с темой, вы будете знать, что он имеет functions.php файл, который дает вам много энергии и позволяет построить плагин-как функциональность в вашей теме. Итак, если у нас есть этот файл functions.php, какой смысл плагина? Когда мы должны использовать один, и когда мы должны создать наши собственные?
Линия здесь размыта, чем вы думаете, и ответ часто зависит от ваших потребностей. Если вы просто хотите изменить длину ваших сообщений выдержки, вы можете безопасно сделать это в functions.php. Если вы хотите что-то, что позволяет пользователям сообщения друг друга и стать друзьями на вашем сайте, то плагин будет лучше соответствовать вашим потребностям.
Основное отличие заключается в том, что функциональность плагина сохраняется независимо от того, какую тему вы включили, в то время как любые изменения, внесенные в functions.php, перестанут работать, как только вы переключите темы. Кроме того, группировка связанных функций в плагин часто более удобнее, чем оставить массу кода в functions.php.
Создание нашего первого плагина
Чтобы создать плагин, все, что вам нужно сделать, это создать папку, а затем создать единый файл с одной строкой содержимого. Перейдите к wp-content/plugins
папке и создайте новую папку с именем awesomeplugin
. Внутри этой новой папки создайте файл под названием awesomeplugin.php. Откройте файл в текстовом редакторе и вставьте в него следующую информацию:
<?php
/*
Plugin Name: Awesomeness Creator
Plugin URI: http://my-awesomeness-emporium.com
description: >-
a plugin to create awesomeness and spread joy
Version: 1.2
Author: Mr. Awesome
Author URI: http://mrtotallyawesome.com
License: GPL2
*/
?>
Из всей этой информации требуется только имя плагина. Но если вы собираетесь распространять плагин, вы должны добавить как можно больше данных, как это возможно.
С этим в сторону, вы можете пойти в задней части, чтобы активировать плагин. Вот и все, что нужно сделать! Конечно, этот плагин ничего не делает; но строго говоря, это активный, функционирующий плагин.
Структурирование плагинов
При создании сложной функциональности разделение плагина на несколько файлов и папок может быть проще. Выбор за вами, но после нескольких хороших советов сделает вашу жизнь проще.
Если ваш плагин фокусируется на одном основном классе, поместите этот класс в основной файл плагина и добавьте один или несколько отдельных файлов для других функций. Если ваш плагин усиливает заднюю часть WordPress с пользовательским управлением, вы можете создать обычные папки CSS и JavaScript для хранения соответствующих файлов.
Как правило, цель для баланса между структурой макета, удобство использования и минимализм. Разделите плагин на несколько файлов по мере необходимости, но не переутомляйте. Я считаю полезным взглянуть на структуру популярных плагинов, таких как WP-PageNavi и Akismet.
Наименование плагина и его функций
При создании плагина, проявлять осторожность при наименовании функций, классов и плагина себя. Если ваш плагин предназначен для генерации удивительных выдержек, то называя его «выдержки» и называя его основной функцией «выдержка» может показаться логичным. Но эти имена являются слишком общими и могут столкнуться с другими плагинами, которые имеют аналогичную функциональность с аналогичными именами.
Наиболее распространенным решением является использование уникальных префиксов. Можно использовать, например, «акме-выдержку» или что-либо еще, что имеет низкую вероятность соответствия чужой схеме именования.
Безопасность плагинов
Если вы планируете распространять плагин, то безопасность имеет первостепенное значение, потому что теперь вы возиться с веб-сайтов других людей, а не только свои собственные. Все меры безопасности вы должны принять заслуживают их собственной статьи, так что следите за предстоящей кусок о том, как обеспечить ваш плагин. А пока давайте просто посмотрим на теорию в двух словах; вы можете беспокоиться о реализации, как только вы поймете, что.
Безопасность вашего плагина обычно зависит от стабильности двух ног. Одна нога гарантирует, что плагин не помогает распространять пикантные данные. Защита от этого влечет за собой фильтрацию ввода пользователя, избегание запросов для защиты от атак на впрыски с помощью S’L и так далее. Вторая нога гарантирует, что пользователь имеет полномочия и намерения для выполнения данного действия. Это в основном означает, что только пользователи, обладающие полномочиями по удалению данных (например, администраторы), должны иметь возможность это сделать. Охрана намерения гарантирует, что посетители не вводить в заблуждение хакера, который сумел разместить вредоносную ссылку на вашем сайте.
Все это гораздо легче сделать, чем вы думаете, потому что WordPress дает вам много функций для обработки его. Однако речь идет о ряде других вопросов и передовой практики, поэтому мы рассмотрим их в будущей статье. Существует много, чтобы узнать и сделать до тех пор; если вы только начинаете, не беспокойтесь обо всем этом на данный момент.
Очистка после себя
Многие плагины виновны в том, что оставили много ненужных данных, лежащих вокруг. Данные, которые использует только ваш плагин (например, мета данные для сообщений или комментариев, таблицы баз данных и т.д.) могут быть мертвы, если плагин не убирает за собой.
WordPress предлагает три большие крючки, чтобы помочь вам заботиться об этом:
-
register_activation_hook()
Этот крючок позволяет создать функцию, которая работает при активации плагина. Он принимает путь к вашему основному файлу плагина в качестве первого аргумента, и функция, которую вы хотите запустить в качестве второго аргумента. Вы можете использовать это, чтобы проверить версию вашего плагина, сделать некоторые обновления между версиями, проверить правильную версию PHP и так далее. -
register_deactivation_hook()
Название говорит само за себя. Эта функция работает как его коллега выше, но она работает всякий раз, когда ваш плагин деактивирован. Я предлагаю использовать следующую функцию при удалении данных; использовать этот только для общего домашнего хозяйства. -
register_uninstall_hook()
Эта функция работает, когда администратор веб-сайта удаляет ваш плагин в задней части WordPress. Это отличный способ удаления данных, которые были лежат вокруг, таких как таблицы баз данных, настройки, а что нет. Недостатком этого метода является то, что плагин должен быть в состоянии работать для его работы; таким образом, если ваш плагин не может удалить таким образом, вы можете создать файл uninstall.php. Ознакомьтесь с документацией этой функции для получения дополнительной информации.
Если ваш плагин отслеживает популярность контента, то удаление отслеживаемых данных, когда пользователь удаляет плагин не может быть мудрым. В этом случае, по крайней мере, указать пользователю на место в задней части, где они могут найти данные плагина, или дать им возможность удалить данные на странице настроек плагина, прежде чем удалить плагин себя.
Чистый результат всех наших усилий заключается в том, что пользователь должен иметь возможность установить плагин, использовать его в течение 10 лет, а затем удалить его, не оставляя следов на веб-сайте, в базе данных или в структуре файлов.
Стандарты документации и кодирования
Если вы разрабатываете для большого сообщества, то документирование вашего кода считается хорошим манерам (и хороший бизнес). Конвенции для этого довольно хорошо созданы — phpDocumentor является одним из примеров. Но до тех пор, как ваш код является чистым и имеет некоторую документацию, вы должны быть в порядке.
Я документиваю код для моей собственной выгоды, а также, потому что я едва помню, что я сделал вчера, а тем более цель функций, которые я написал месяцев назад. Документируя код, вы навязываете себе передовую практику. И если вы начинаете работать в команде или если ваш код становится популярным, то документация будет неизбежной частью вашей жизни, так что вы можете также начать сейчас.
Хотя это и не так важно, как документация, соблюдение стандартов кодирования является хорошей идеей, если вы хотите, чтобы ваш код в соответствии с руководящими принципами WordPress.
Ввод его на практике
Вся работа и не игра делает Джека скучным мальчиком, так что давайте сделаем что-нибудь со всеми этими знаниями, которые мы только что приобрели. Чтобы продемонстрировать, давайте построим быстрый плагин, который отслеживает популярность наших статей, храская, сколько раз каждый пост был просмотрен. Я буду использовать крючки, которые мы рассмотрим в предстоящей партии в этой серии. До тех пор, до тех пор, как вы понять логику за ними, все хорошо; Вы поймете крючки и плагины в долгосрочной перспективе!
Планирование впереди
Прежде чем писать какой-либо код, давайте подумаем заранее и постараемся определить функции, которые понадобятся нашему плагину. Вот что я придумал:
- Функция, регистрируемая представление каждый раз, когда отображается отдельный пост,
- Функция, которая позволяет нам получить необработанное количество представлений,
- Функция, которая позволяет нам показывать пользователю количество просмотров,
- Функция, которая получает список сообщений на основе их количества представлений.
Подготовка нашей функции
Первым шагом является создание структуры папки и файлов. Ввод всего этого в один файл будет хорошо, так что давайте перейдем к plugins
папке и создать новую папку с именем awesomely_popular
. В этой папке создайте файл под названием awesomely-popular.php. Откройте свой новый файл, и вставьте некоторые мета данные в верхней части, что-то вроде этого:
<?php
/*
Plugin Name: Awesomely Popular
Plugin URI: http://awesomelypopularplugin.com
description: >-
A plugin that records post views and contains functions to easily list posts by popularity
Version: 1.0
Author: Mr. Awesome
Author URI: http://mayawesomefillyourbelly.com
License: GPL2
*/
?>
Запись просмотров постов
Не углубляясь слишком глубоко, WordPress крючки позволяют (среди прочего) огонь от одной из ваших функций, когда другая функция WordPress работает. Таким образом, если мы можем найти функцию, которая выполняется всякий раз, когда отдельный пост просматривается, мы все готовы; все, что нам нужно сделать, это написать нашу собственную функцию, которая записывает количество просмотров и подключить его дюйма Прежде чем мы доберемся до этого, однако, давайте напишем новую функцию себя. Вот код:
/**
* Adds a view to the post being viewed
*
* Finds the current views of a post and adds one to it by updating
* the postmeta. The meta key used is "awepop_views".
*
* @global object $post The post object
* @return integer $new_views The number of views the post has
*
*/
function awepop_add_view() {
if(is_single()) {
global $post;
$current_views = get_post_meta($post->ID, "awepop_views", true);
if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
$current_views = 0;
}
$new_views = $current_views + 1;
update_post_meta($post->ID, "awepop_views", $new_views);
return $new_views;
}
}
Как вы можете видеть, я добавил phpDocumentor стиле документации в верхней части функции, и это очень хороший показатель того, что ожидать от этой конвенции. Прежде всего, используя условный тег,мы определяем, просматривает ли пользователь публикацию на выделенной странице.
Если пользователь находится на выделенной странице, мы потягиваем $post
объект, который содержит данные о показе публикации (ID, название, дата размещения, количество комментариев и т.д.). Затем мы извлекаем количество представлений, которые публикация уже получила. Мы добавим 1
к этому, а затем перезаписать orignal значение с новым. В случае, если что-то пойдет не так, мы сначала проверяем, является ли текущее количество представлений тем, каким оно должно быть.
Текущий подсчет представлений должен быть установлен; она не может быть пустой. И это должно быть числовое, чтобы мы могли добавить 1
к нему. Если он не соответствует этим критериям, то мы могли бы с уверенностью поспорить, что текущий подсчет просмотров 0
. Далее мы 1
добавляем к нему и сохраняем его в базе данных. Наконец, мы возвращаем количество просмотров, которые получил пост, вместе с этим последним номером.
Пока все в порядке. Но эта функция никогда не называется, поэтому она не будет на самом деле использоваться. Это где крючки прийти дюйма Вы можете перейти в файлы вашей темы и вызова функции вручную оттуда. Но тогда вы потеряете эту функциональность, если вы когда-нибудь изменили тему, тем самым победив всю цель. Крюк, wp_head
названный, который работает как раз перед </head>
тегом присутствует в большинстве тем, поэтому мы можем просто установить нашу функцию для запуска всякий раз, когда wp_head
работает, как это:
add_action("wp_head", "awepop_add_view");
Вот и все, что есть к «мистики» крючков. Мы в основном говорят, когда wp_head
работает, а также выполнить awepop_add_view
функцию. Вы можете разместить код до или после самой функции.
Получение и отображение представлений
В функции выше, я уже get_post_meta()
использую функцию WordPress для получения представлений, так что написание отдельной функции для этого может показаться немного излишним. В этом случае он вполне может быть излишним, но он способствует некоторому объектно-ориентированного мышления, и это дает нам большую гибкость при дальнейшем развитии плагина. Давайте взглянем:
/**
* Retrieve the number of views for a post
*
* Finds the current views for a post, returning 0 if there are none
*
* @global object $post The post object
* @return integer $current_views The number of views the post has
*
*/
function awepop_get_view_count() {
global $post;
$current_views = get_post_meta($post->ID, "awepop_views", true);
if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
$current_views = 0;
}
return $current_views;
}
Это тот же кусок кода, который мы использовали в awepop_add_view()
функции, так что вы можете просто использовать это для получения просмотра рассчитывать там же. Это удобно, потому что если вы решите обрабатывать 0
дело по-другому, вам нужно только изменить его здесь. Вы также сможете легко расширить это и обеспечить поддержку в случаях, когда мы не находимся в цикле (т.е. когда $post
объект недоступен).
До сих пор мы только что получили количество просмотров. Теперь давайте покажем это. Вы можете думать, что это глупо — все, что нам echo awepop_get_view_count() . “views”
нужно, нет? Это, безусловно, будет работать, но что, если есть только 1 вид. В этом случае нам нужно будет использовать единственное «вид». Вы также можете получить свободу добавления какого-либо ведущего текста или какого-либо другого лакомого кусочка, что было бы трудно сделать иначе. Итак, чтобы разрешить эти сценарии, давайте напишем еще одну простую функцию:
/**
* Shows the number of views for a post
*
* Finds the current views of a post and displays it together with some optional text
*
* @global object $post The post object
* @uses awepop_get_view_count()
*
* @param string $singular The singular term for the text
* @param string $plural The plural term for the text
* @param string $before Text to place before the counter
*
* @return string $views_text The views display
*
*/
function awepop_show_views($singular = "view", $plural = "views", $before = "This post has: ") {
global $post;
$current_views = awepop_get_view_count();
$views_text = $before . $current_views . " ";
if ($current_views == 1) {
$views_text .= $singular;
}
else {
$views_text .= $plural;
}
echo $views_text;
}
Показать список сообщений, основанных на представлениях
Чтобы показать список сообщений на основе количества просмотров, мы создаем функцию, которую мы можем разместить в любом месте нашей темы. Функция будет использовать пользовательский запрос и цикл через результаты, отображая простой список названий. Код ниже, и объяснение следует.
/**
* Displays a list of posts ordered by popularity
*
* Shows a simple list of post titles ordered by their view count
*
* @param integer $post_count The number of posts to show
*
*/
function awepop_popularity_list($post_count = 10) {
$args = array(
"posts_per_page" => 10,
"post_type" => "post",
"post_status" => "publish",
"meta_key" => "awepop_views",
"orderby" => "meta_value_num",
"order" => "DESC"
);
$awepop_list = new WP_Query($args);
if($awepop_list->have_posts()) { echo "<ul>"; }
while ( $awepop_list->have_posts() ) : $awepop_list->the_post();
echo '<li><a href="'.get_permalink($post->ID).'">'.the_title(’, ’, false).'</a></li>';
endwhile;
if($awepop_list->have_posts()) { echo "</ul>";}
}
Мы начинаем с передачи кучу параметров в WP_Query
класс, для того, чтобы создать новый объект, который содержит некоторые сообщения. Этот класс будет делать тяжелую работу для нас: он находит 10 опубликованных сообщений, которые имеют awepop_views
в мета-таблице, и заказывает их в соответствии с этим свойством в порядке убывания.
Если сообщения соответствуют этому критерию, мы создаем элемент неупорядоченного списка. Затем мы цикл через все сообщения, которые мы получили, показывая каждое название в качестве ссылки на соответствующий пост. Мы крышка вещи, добавив заключительный тег в список, когда Есть должности, чтобы показать. Размещение awepop_popularity_list()
функции в любом месте в вашей теме должны теперь генерировать простой список сообщений, заказанных популярностью.
В качестве дополнительной меры предосторожности, поместите вызов к этой функции в вашей теме, как так:
if (function_exists("awepop_popularity_list")) {
awepop_popularity_list();
}
Это гарантирует, что если плагин отключен (и, таким образом, функция становится неопределенным), PHP не будет бросать большую ошибку ПР . Он просто не будет показывать список самых популярных постов.
Обзор
Следуя теории, изложенной в этой статье и используя только несколько функций, мы создали рудиментарный плагин для отслеживания наших самых популярных сообщений. Это может быть значительно улучшено, но он показывает основы использования плагинов отлично. Кроме того, изучая некоторые модели развития WordPress (плагины, крючки и т.д.), вы получаете навыки, которые будут служить вам в не-WordPress среды, а также.
Теперь вы должны быть в состоянии уверенно следовать учебники, которые начинаются с «Во-первых, создать плагин WordPress …» Теперь вы понимаете вещи не только на основе необходимости знать, но и на более глубоком уровне, что дает вам больше гибкости и мощности при кодировании собственных плагинов. Оставайтесь с нами для предстоящей статьи о крючки, действия и фильтры для еще более углубленного ресурса на внутренности плагинов.
Источник: smashingmagazine.com