Как да правим Wordpress разширения: Уроци за начинаещи

KISS

Active Member
Здравейте.

Дойде ми идеята и желанието да публикувам от време на време кратки уроци за създаване на Wordpress разширения (плъгини). Та да видим ще има ли интерес.

Какво е нужно да знаете преди да започнете?

- HTML
- CSS
- JavaScript (и евентуално малко jQuery)
- PHP
- MySQL
- Английски език
- Работа с WordPress (естествено)

Принципно ще можете да направите някакво разширение и само с HTML и PHP, но не ви препоръчвам да започвате да се занимавате с това ако не разбирате от горните неща.

Какво ще представляват уроците?

Ще бъдат по-кратки и няма да бъдат изчерпателни. Няма как тази тема да ви е единствения ресурс за учене.

Ще ви покажа някои неща и ще давам линк към страници с повече информация. Поне това е планът, пък ще видим какво ще стане.

Урок 1: Създаване и качване на файл за Wordpress разширение

Създайте си една папка на име my-plugin и в нея създайте php файл на име my-plugin.php. Във файла поставете следния код:

PHP:
<?php

/*
Plugin Name: Моето разширение
Plugin URI: http://example.com/
Description: Това е описанието на моето разширение.
Author: Киро и Спиро
Version: 1.0.0
Author URI: http://example.com/
*/

?>

Това са хедър данни за разширението, които сами се обясняват (ако знаете английски) и ще станат още по-ясни като видите разширението в сайта си.

Запишете файла с кодировка UTF-8 without BOM за да работи кирилицата и качете папката в един Wordpress сайт в папка wp-content/plugins/. (Предполага се че имате хостинг, но ако нямате може да си сложите на компютъра готов Wordpress).

Влезте в админ панела на сайта и вижте вашето разширение в списъка с разширения. Браво! Направихте първото си разширение, което прави абсолютно нищо :).

Повече информация за хедър данните: https://developer.wordpress.org/plugins/the-basics/header-requirements/

Толкова като за първи урок.
Поздрави.
 
- Работа с WordPress (естествено)

Как това да си кликач ти помага в разработката на каквото и да било?

UTF-8 without BOM за да работи кирилицата

Windows-а явно ти е изял знанията, това не се прави заради кирилицата.
 
До тук добре, само хейт за сега :D. Ами кирилицата не се показва правилно ако е ANSI, така че аз за това го правя.
 
Хайт? Къде видя хейт.

Какво е utf-8. Под ANSI предполагам визираш енкодинга cp1252, защото ANSI се позлва за default енкодинга, който може да бъде cp1251 (кирилица).
 
@hristonev
Благодаря. Идеята е принципно само аз да публикувам уроците, че иначе смятам ще стане голяма каша с много учители (всеки с неговите си кодове и стилове на програмиране и без да се следва обща последователност, хората ще се объркат доста). Естествено ако сгреша нещо, ме поправяйте.
 
global $wpdb;

$table_name = 'stupid_comments';

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
autor tinytext NOT NULL,
comment text NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
 
Урок 2: Закачане за Wordpress куки и първият смислен плъгин

Когато Wordpress изпълнява програмния си код, на множество места минава през куки (hooks), за които можем ние да се закачим и да добавим нашия код. Това става чрез двете Wordpress функции add_action() и add_filter(). Тези две функции са много важни и се използват непрестанно при създаване на разширения.

В този урок ще направим малко разширение, което с помощта на add_filter() ще замени думата Google във всички публикации и страници в сайта с линка Google.

Отворете файла my-plugin.php от Урок 1 и под коментара с хедър данните добавете този код:

PHP:
add_filter('the_content', 'my_google_link_function');

function my_google_link_function($content)
{
    $new_content = str_replace("Google", "<a href='http://www.google.com'>Google</a>", $content);
    return $new_content;
}

Първо извикваме add_filter() с 2 задължителни аргумента. Първият е името на куката, за която се закачаме - това е филтъра the_content (с него променяме съдържанието на публикации и страници). Вторият аргумент е името на нашата функция с нашия код.

Нашата функция my_google_link_function(), както виждате има един аргумент. Този аргумент ни се дава от филтъра the_content. След като направим каквото ще правим, трябва да върнем една променлива със новото съдържание на поста или страницата.

Какво трябва да върнем и колко аргумента имаме на разположение се определя от конкретната кука, която ползваме. Тоест филтъра the_content. Трябва да прочетем в неговата документация: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content

Качете редактирания файл на разширението и го активирайте. Публикувайте страница или пост с думата Google някъде в текста и тя ще стане на линк (ако е включено разширението ви).

Повече информация:
Филтри: https://codex.wordpress.org/Plugin_API/Filter_Reference
Функция add_filter(): https://developer.wordpress.org/reference/functions/add_filter/
Филтър the_content: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
 

В този урок ще направим малко разширение, което с помощта на add_filter() ще замени думата Google във всички публикации и страници в сайта с линка Google.
А ако имаме woocomrce примерно да разбирам ли, че при продуктите няма да замени думата със линк?
 
А ако имаме woocomrce примерно да разбирам ли, че при продуктите няма да замени думата със линк?
Продуктите там реално са публикации от собствен тип на име product. То всъщност и страниците са публикации от тип page. Повече за видовете публикации: https://codex.wordpress.org/Post_Types
Така че и в продуктите ще се замени, освен ако не добавим проверка за вида на публикацията.
 
Урок 2: Закачане за Wordpress куки и първият смислен плъгин

Когато Wordpress изпълнява програмния си код, на множество места минава през куки (hooks), за които можем ние да се закачим и да добавим нашия код. Това става чрез двете Wordpress функции add_action() и add_filter(). Тези две функции са много важни и се използват непрестанно при създаване на разширения.

В този урок ще направим малко разширение, което с помощта на add_filter() ще замени думата Google във всички публикации и страници в сайта с линка Google.

Отворете файла my-plugin.php от Урок 1 и под коментара с хедър данните добавете този код:

PHP:
add_filter('the_content', 'my_google_link_function');

function my_google_link_function($content)
{
    $new_content = str_replace("Google", "<a href='http://www.google.com'>Google</a>", $content);
    return $new_content;
}

Първо извикваме add_filter() с 2 задължителни аргумента. Първият е името на куката, за която се закачаме - това е филтъра the_content (с него променяме съдържанието на публикации и страници). Вторият аргумент е името на нашата функция с нашия код.

Нашата функция my_google_link_function(), както виждате има един аргумент. Този аргумент ни се дава от филтъра the_content. След като направим каквото ще правим, трябва да върнем една променлива със новото съдържание на поста или страницата.

Какво трябва да върнем и колко аргумента имаме на разположение се определя от конкретната кука, която ползваме. Тоест филтъра the_content. Трябва да прочетем в неговата документация: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content

Качете редактирания файл на разширението и го активирайте. Публикувайте страница или пост с думата Google някъде в текста и тя ще стане на линк (ако е включено разширението ви).

Повече информация:
Филтри: https://codex.wordpress.org/Plugin_API/Filter_Reference
Функция add_filter(): https://developer.wordpress.org/reference/functions/add_filter/
Филтър the_content: https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
Друг шитав плъгин ме подсети и да похейтя малко:
Заснемане.PNG
 
  • Like
Реакции: KISS
Друг шитав плъгин ме подсети и да похейтя малко:
Виж файлът 14513

Да, прав си. Откри бъг в плъгина :). Ако имаме вече такъв линк, думата ще стане втори линк в него. Но все пак няма го поправям това, тъй като то е свързано с PHP програмирането, а не с Wordpress програмирането. Идеята е просто да се види как се ползва филтъра.
 

Горе