К основному контенту

Создание плагина WordPress, что такое хуки, создание пунктов меню и подменю в админ панели

Приветствую всех!
Поговорим немного о WordPress. Темой этого поста будут хуки (hooks). При разработке плагина я использовала многие языки и технологии, такие как MySQL, AJAX, JavaScript, Bootstrap, ну и конечно же PHP. Знание HTML и CSS является, конечно-же, обязательным, хотя-бы, основ. Скоро будет цикл статей, и я постаралась собрать те хуки, по которым сложно найти информацию на русскоязычных ресурсах, а есть хуки и экшены, по которым почти нет информации в сети вообще. Местами могу повторять некоторые ресурсы, за что заранее приношу извинения. Буду также рассказывать о очень распостраненных хуках, которые надо обязательно знать при написании плагина.

Что такое хуки? На первый взгляд, когда я начала изучать WordPress, они мне казались загадочными и странными, их казалось слишком много (их действительно ОЧЕНЬ много), но в работе, как оказалось, нужно не так много. При определенной сноровке, поиск нужных хуков становится довольно простой задачей. Но давайте сначала разберемся, зачем это нужно.
Hook в прямом переводе с английского означает "крючок", т.е. зацепка. Слово отлично отображает смысл этого явления, так как хуки - это пользовательские функции, которые привязаны к определенным функциям WordPress. Все сайты WordPress состоят из определенных функций, в которые можно внести изменения, либо переписать их. Напрямую код сайта менять нельзя. Хуки можно внести только в файл functions.php, либо в свой плагин.
Привязка хука может быть двух типов: выполнение пользовательской функции(после выполнения основной функции WordPress) – фильтр, и выполнение пользовательской функции взамен стандартной функции WordPress – действие.
Для тех, кто привык к программистской терминологии - вот еще одно определение: хук - это перегрузка функций WordPress.

Итак, начнем с простого, как добавить плагин в админ меню, и как сделать подстраницы меню плагина?
Для этого существует хук admin_menu. В первой строке мы объявляем о том, что хотим создать хук (add_action), admin_menu - сам хук, к которому происходит зацепка, my_plugin_menu - название нашей функции в которой непосредственно мы пишем то, что хотим добавить, эту часть мы можем назвать как угодно на самом деле, т.к. это наша личная функция, но советую наполнить название смыслом.
в 3 строке начинается сама функция. в 5 строке мы используем функцию wordpress add_menu_page, в 6 - add_submenu. При правильном указании аргументов у вас в панели должно получиться нечто такое:

Давайте разберемся с аргументами.

add_menu_page(заголовок страницы, название пункта меню, уровень доступа(можно оставить его 8), расположение файла на который будет перенаправление при нажатии на этот пункт меню, иконка(необязательно), позиция в меню(номер строки))

add_submenu_page(расположение файла на который идет перенаправление при нажатии на главный пункт меню, заголовок страницы, название пункта подменю,  уровень доступа, расположение страницы в которой будет располагаться код данного подпункта меню)


  1. add_action( 'admin_menu', 'my_plugin_menu');
  2. function my_plugin_menu() 
  3. {
  4.   add_menu_page( 'My Plugin Options', 'User Plans', 8, PRICE_PLUGIN_DIR.'notifications.php', '', 'dashicons-groups', 6);
  5.   add_submenu_page( PRICE_PLUGIN_DIR.'notifications.php', 'Notifications', 'Notifications', 8, PRICE_PLUGIN_DIR.'notifications.php' );
  6.   add_submenu_page( PRICE_PLUGIN_DIR.'notifications.php', 'Plans', 'Plans', 8, PRICE_PLUGIN_DIR.'plans.php' );
  7. }

Комментарии

Популярные сообщения из этого блога

Прата С. Решение задач 6 главы

На решение этих задач у меня ушло 2 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

Прата С. решение задач 5 главы

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

Прата С. Решение 3 и 4 главы

Повторюсь, взяла только интересные мне задания, т.е. с элементами того что поняла плохо/не встречала ранее. Сделала за сегодня. с удовольствием отмечаю что сдвиги  в положительную сторону  хотя-бы в стиле есть . в 4 главе ясно объяснено почему при вводе нескольких строк начинаются проблемы, и как этого избежать, подробно описана работа с входным потоком. Как работать со строками стиля Си и класса String, разница. для себя я сделала выводы что лучше всего, конечно-же класс string. намного меньше мороки. и метод ввода getline в обоих случаях. в задачах разница проиллюстрирована. и кстати, указатели больше не вызывают у меня ужаса и трепета. много нового узнала о видах структур. эта глава расставила все по местам в моей голове. правда, зачем в задачи на СР втиснута работа с массивом array - загадка. он ведь толком не объяснен, но понять его интуитивно можно, правда, зачем его использовать не зная тонкостей, как обычный массив с немного иным объявле...