Jak publikovat plugin na WordPress.org?

PHP WordPress

POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.

Rád bych se podělil o zkušenosti s tím, jak jsem publikovat plugin na stránkách WordPress.org. Díky tomu se plugin totiž dostane na stránku s vyhledáváním pluginů v každé WordPress administraci.

Má to samozřejmě svá pravidla, nepustí tam všechno.

Pravidla

  1. Plugin musíte vydat pod licencí GNU/GPL 2.0, či novější nebo minimálně licencí, která je s GNU/GPL 2.0 kompatibilní.
  2. Plugin nesmí obsahovat nelegální nebo útočný obsah (to se řeší individuálně, podle toho kdo plugin schvaluje)
  3. Plugin musíte nahrát do SVN repozitáře, do kterého po schválení pluginu dostanete přístup.
  4. Plugin nesmí na veřejné části webu (myšleno webu uživatele, který plugin použije) přidávat externí odkazy, aniž by vám uživatel nedal výslovný souhlas.
  5. Plugin musí dodržovat seznam pokynů pro vývoj.

Pokyny pro vývoj

Pokynů, kterých se musíte držet je dost, jsou však přehledně vypsány přímo na stránkách WordPressu, ale vypíchl bych ty, se kterými jsem měl sám problém.

Kód musí být lidsky čitelný

Je třeba si uvědomit, že před tím, než je váš plugin vypuštěn do světa, projde fyzickou kontrolou člověka, který má přijímání pluginů na starosti. Tím pádem musí být kód napsát tak, aby nebyl problém ho pochopit, tudíž je nutný nepouživat nesmyslný názvy tríd, metod, funkcí nebo proměnných. (Typicky tuna jedno písmenkových proměnných.)

Veškeré vstupy musí být sanitizovány, validovány a escapovány

Sanitizování

Vstup nejprve musí projít sanitizací, což (jak napovídá překlad výrazu) „dezinfikuje“ vstup dle typu.

Například funkce sanitize_key() vstup převede na malá písmena, a kromě alfanumerických znaků povoluje pouze pomlčky a podtržítka.

Nebo třeba funkce sanitize_text_field() zvaliduje UTF-8, odstraní přebytečné bílé znaky, odstraní HTML kód, konvertuje „<“ na entitu a tak podobně.

echo sanitize_text_field("<strong>Tučný text<</strong>"); 
// "Tučný text&lt;"

Záleží vždy na dané funkci k danému vstupu, co s ním provede. Existuje jich celá řada.

Validace

Validování je klasická kontrola, kdy si například zkontrolujete, že vám uživatel poslal číslo, pokud číslo požadujete. Myslím, že zde není moc co dodat.

Escapování

Veškerý výstup do šablony musí projít přes escapovací funkce, které WordPress nabízí.

esc_html(), esc_url(), esc_js(), esc_attr(), esc_textarea()

echo esc_html("<strong>Tučný text<</strong>"); 
// "&lt;strong&gt;Tučný text&lt;&lt;/strong&gt;"

README

Až budete pro plugin vytvářet readme.txt, držte se vzoru, který máte připravený: wordpress.org/plugins/readme.txt.

Z daného readme.txt totiž systém automaticky extrahuje informace, jako například název pluginu, verze a také popis, který v detailu pluginu uvidíte.

Následně si jej před odeslání můžete sami zkontrolovat, zda je správně pomocí validátoru.

readme.txt vypadá takto:

=== Light Admin Theme ===
Contributors: katuscak
Tags: admin, theme, dashboard
Requires at least: 4.6
Tested up to: 4.9.8
Stable tag: 0.2
Requires PHP: 5.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

This plugin will simplify your administration.

== Description ==

This plugin will simplify your administration.

Options:

* General
    * White theme
* Dashboard
    * Hide Welcome panel
    * Hide default boxes
    * Add box with your logo and title 
* Admin panel
    * Remove WordPress logo
    * Remove comments information

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/light-admin-theme` directory, or install the plugin through the WordPress plugins screen directly.
2. Activate the plugin through the 'Plugins' screen in WordPress
3. Use the "Settings->Light Admin theme" screen to configure the plugin


== Screenshots ==

1. Without plugin -> With plugin
2. Without plugin
3. Plugin options
4. With plugin

== Changelog ==

= 0.3 =
* Option for enable/disable white theme

= 0.2 =
* Custom logo in login page
* New white design of administration
* Fix problem with save blank parameters in "Settings->Light Admin theme"

= 0.1 =
* Basic settings of dashboard, top panel and style.

Proces odeslání pluginu do WordPressu

Odeslat ZIP

Než plugin bude smět být dostupný pro všechny uživatele, musí projít (jak jsem už zmiňoval výše) fyzickou validací.

Na této stránce: wordpress.org/plugins/developers/add odešlete zabalený plugin v zipu a pak jen čekáte, až se na něj někdo podívá. Tím se zamezí balastu, který by se jinak mohl zveřejnit.

Kontrola probíhá pouze při prvním odesláním pluginu, u jeho následných aktualizací se tak již neděje.

Počkat

Například u mne trvalo 5 dní, než plugin prošel kontrolou a další 4 dny jsme po emailech řešili opravné verze.

Nahrát na SVN repozitář

Když je plugin zkontrolovaný, dostanete přístupy do SVN repozitáře a už ho tam jen nahrajete. Doporučuje se použít třeba TortoiseSVN a mohu potvrdit, že se s ním na Windows pracuje dobře.

Kód nahrajte do složky „/trunk“. Tam se ukládá kód, který je následně dostupný pro veřejnost.

Do složky „/assets“ ukládáte loga, screenshoty a bannery. Vlastní assety pluginu (potřebné styly, skripty…) samozřejmě nahrajte do složky „/trunk“ spolu s celým kódem, protože složka „/assets“ je určená pro prezentaci pluginu na stránkách WordPress.org.

Složku „/tags“ nemusíte používat, spíš je vhodnější vést si bokem vlastní (třeba GIT) repozitář a tam si své změny verzovat a tagovat.

Více informací o složkách se dozvíte na stránkách.

Aktualizace

Pokud máte opravný kód nebo úplně novou verzi, tak je potřeba upravit readme.txt, kde označíte číslo nové verze a popíšete úpravy v sekci „Changelog“.

Kód včetně nového readme.txt potom nahrajete opět do „/trunk“ a je hovoto. Webové stránky s nainstalovaným pluginem jsou automaticky vyzvány k aktualizaci.

Zdroje

https://wordpress.org/plugins/developers/
https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/
https://developer.wordpress.org/plugins/wordpress-org/how-to-use-subversion/
https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/

Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)

Komentáře