История моего первого плагина WP

Эта статья была написана в начале 2010 года и впервые опубликована на уже несуществующем сайте.
 
Предполагалось её использование в учебном процессе для того, что бы показать "что не боги горшки обжигают"
 .


Замечательная штука плагины в CMS! Ведь, что они позволяют делать? — управлять системой управления контентом. Тавталогия, однако. Как показала практика, возможностей шаблона или, так называемой в WordPress, "темы" не хватает. Впрочем, как и в любой другой серийно производимой продукции (копируемой). Для любого информационщика, кое-что понимающего в "электрических технологиях", всегда хочется больше того, что предлагают "готовые решения". И хотя не могу похвастаться богатым практическим  опытом PHP программирования, родной все же С++, да и к WordPress всего лишь присматриваюсь, но самое главное в успехе любого предприятия уверенность — "не боги горшки обжигают", и отсутствие сомнений в результате — любая задача по плечу. Поэтому принимаемся совершенствовать свои ресурсы, тем более, что сейчас интересуют, скорее, изящество алгоритма и время, за которое задача будет решена, чем какой-то реальный практический выхлоп. Это первый эксперимент с плагином для WP, а результат Вы уже наблюдаете. Плагин установлен и активирован здесь, в этом блоге.

Обратите внимание, справа-вверху у некоторых слов, например, CMS или WordPress, встречающихся в этой заметке, наблюдается странный символ . Да и подкрашены эти слова как-то интересно, похоже на ссылку. А это и есть ссылка, только "умная" ссылка, с секретом — жмите смело и приоткроется таинственный занавес. Вы окажитесь на страничке Википедии с разъяснением именно этих слов. Если, конечно, они описаны в энциклопедии. А если учесть, что для создания такой "умной" ссылки при записи заметки потребовалось нажать всего по 2 раза на 2 клавиши, всего 4 движения над клавиатурой, вместо ручной HTML-верстки километровых URL, то просто замечательный результат! Собственно в это и заключается идея плагина. Итак,

постановка задачи или пожелания в техническое задание

Постольку-поскольку, целевая аудитория блога — школяры, студенты, учителя и преподаватели, т.е. в некотором роде, новички и вечно любопытствующие, то хотелось бы поделиться не только своими знаниями, но опытом всего человечества. Читает читатель читает, натыкается на что-то непонятное, "кликает" мышкой в непонятки, и получает авторитетное разъяснение. Только обязательно нужны авторитетные источники, а лучше всего один, дабы не превратиться в поисковы автомат для уточнения терминов в своих же собственных постах.

Спасет нас энциклопедия, народная электронная энциклопедия — Википедия. Концентрированный опыт миллионов читателей, выраженный в статьях, разъясняющих термины самого широкого спектра знаний. Поистине общедоступная, авторитетная многотомная энциклопедия, в которой надо попасть на нужную страницу.

Присутствие авторитетных ссылок в статьях всегда было замечательным способом доказать оригинальность текста — автор думал, слова подбирал, сверял, так сказать, свои мысли и не занимался словоблудием. Кумулятивная адсорбция шедеврального агломерата, в простонародии КАША, посмотрели, нет в Вики — словоблудие. Реализовать такую возможность технически сегодня сможет практически любой, знакомый с PHP и CMS, и очень, даже, просто. Для этого надо решить следующие задачи:

  1. выделить в своем тексте наиболее простым способом термины, которые требую разъяснения из энциклопедии;
  2. передать значения термина в поисковую машину Вики;
  3. открыть в новом окне браузера найденную Вики страницу с разъяснениями

Разделы ТЗ о требованиях к аппаратуре и квалификации обслуживающего персонала, совместимости программного обеспечения, технико-экономического обоснования и техники безопасности при работе с ПО пропустим. оставим только функционал.

Анализ задач

Как выделить в тексте термин? Как автоматизировать поиск выделенного термина в Вики и открыть нужную статью в новом окне?

Выделить фрагмент текста проще всего символами, которые не используются в качестве команд форматирования в HTML, например, ''[ и ]''. Слово '' и '' стало нашим термином, который мы хотим найти в Вики. Затем необходимо сформировать командную строку или http-запрос со ссылкой на Вики, вставив туда выделенный фрагмент в качестве аргумент. Далее оформить этот запрос якорями HTML и перед отображением содержимого страницы заменить выделенный фрагмент нашей сформированной строкой.

Механизм реализации

Идея простая и, как говорится, витает в воздухе. Неужели нет кода для WordPress? Поискал, за-Googl-ил — не нашел. Может плохо искал. Но вот для Joomla есть такая мулька. Задача упрощается, алгоритм поиска и замены выделенного фрагмента уже есть. Остается убрать из кода особенности плагина Joomla и вставить туда обвязку плагина WordPress. Так и поступим. Ниже Вы можете сравнить, что было для Joomla и, что получилось WordPress:

Исходный код для Joomla Результат творческого преобразования
Показать в отдельном окне Показать в отдельном окне*

ПРИМЕЧАНИЕ: * — в тексте все комментарии "Результата творческого преобразования" сделаны на русском языке. Поэтому корректное чтение в отдельном окне возможно только после принудительного выбора кодировки utf-8 вашего браузера

Прежде, чем приступить к реализации надо почитать оригинальную документацию WordPress о том, как писать плагины, так сказать, для общего развития.

Для начала, после знакомства с Сodex WordPress создаем файл gowiki.php. Не знаю, как для кого, но для меня текстовый редактор AkelPad стал основным инструментом в такого рода работах. Рекомендую абсолютно бескорыстно. Записываем заготовку-обвязку плагина:

<?php
/*
 Plugin Name: GoWiki
 Plugin URI: http://waksoft.16mb.com/download
 Description: создает ссылку на ресурс wikipedia по выделенному слову
 Author: Костерин В.В.
 Version: V1.0
 Author URI: http://waksoft.16mb.com
*/

/* 
     Copyright 2011 Vadim V. Kosterin, (email: waksoft@gmail.com)
     This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
     This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.
     You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

add_filter(''the_content'', ''go_wiki'');
function go_wiki($content) {
}
?>

Здесь, конечно, самые важные строки:

add_filter(''the_content'', ''go_wiki'');
function go_wiki($content) {
}

где на "крючок" вывода содержания ''the_content'' поста прицепляется функция ''go_wiki'', которой в качестве аргумента передается это самое содержание $content, над которым и можно в ней издеваться. Алгоритм издевательства уже есть.

"Исходный код Joomla" рекомендую так же перенести в окно текстового редактора. Тот же Akelpad, он еще умеет считать строчки. До 81 строки описаны особенности плагина Joomla и интернационализация. Беспокоясь только о русских, и забыв про интернационал, смело все удаляем до строк:

// Set the expression to be matched
	$regex = "#\

\

!(.*?)\\#s";

Готово. Сохраняем остатки в буфере обмена, клавиши [Ctrl/Ins], и переносим его, клавиши [Shift/Ins], в файл-заготовку gowiki.php между фигурными скобками описания функции function go_wiki($content).

Заметим, что наш $content — это $row->text. Поэтому смело заменяем все вхождения $row->text на $content. Собственно можно уже пробовать. Записываем наш файл gowiki.php в специально сделанную папку wikigo в /wp-content/plugins, получиться /wp-content/plugins/wikigo.

Собственно, всё! Пользуйтесь люди!

Оригинал: Записки преподавателя

CC BY-NC-SA 4.0 История моего первого плагина WP by Костерин Вадим Валентинович is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


1 нравится это

Автор

Вадим Валентинович Костерин

Директор Инженерного центра корпоративных информационных систем Высшей школы экономики и управления НИУ Южно-Уральский государственный университет. Лауреат ВДНХ, награждён серебряной медалью. Лауреат Всероссийских, международных и региональных (1998–2015 гг.) выставок, за множеством которых перечисление потеряло смысл.

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