URL shortener pro WordPress
Pluginů pro zkracování URL existuje pro WordPress spousta. Nenašel jsem ale žádný, který by měl nějaké jednoduché API. Mohl jsem si samozřejmě nainstalovat PHP aplikaci yourls, ale rozhodl jsem se napsat jednoduchý plugin pro zkracování URL na WordPressu.
Požadavky na plugin
Na plugin jsem měl jen několik požadavků:
- API pro zkrácení URL
- Jednoduchý formulář pro zkrácení URL
- Možnost instalace na libovolný WP web
Jak plugin URL Shortener vytvořit
Logika pro tvorbu takového pluginu je: vytvoříme plugin, přidáme custom REST API endpoint, vytvoříme shortcode pro zobrazení formuláře na webu. Při odeslání formuláře zavoláme náš custom endpoint, uložíme data do DB do tabulky, kterou jsme si předtím vytvořili, a pak přidáme vlastní rewrite_rule, které při načtení stránky zkontroluje, jestli nás náhodou nemá někam přesměrovat, pokud ano, udělá to.
Pojďme se podívat na třídu, která zajistí přesměrování uživatele ze zkrácené URL na původní:
<?php namespace WPProgramator\UrlShortener; class Rewrite { /** * @var Shortener */ private $shortener; /** * Rewrite constructor. * * @param Shortener $shortener */ public function __construct( Shortener $shortener ) { $this->shortener = $shortener; add_action( 'init', array( $this, 'add_rewrite_rules' ) ); add_action( 'template_redirect', array( $this, 'maybe_redirect' ) ); } /** * Add the custom rewrite rules */ public function add_rewrite_rules() { add_rewrite_rule( '^u/([a-zA-Z0-9]+)/?', 'index.php?short_url=$matches[1]', 'top' ); add_rewrite_tag( '%short_url%', '([^&]+)' ); } /** * Redirect to the original URL */ public function maybe_redirect() { // Check if we got the hash $hash = get_query_var( 'short_url' ); if ( ! $hash ) { return; } // Check if we have the hash in db $original_url = $this->shortener->get_original_url_by_hash( $hash ); if ( ! $original_url ) { return; } // Redirect to the original URL wp_redirect( $original_url ); exit(); } }
V kódu nejprve přidáme pravidlo, které vytvoři adresu vasweb.cz/u/nejakyhash, a přidáme tag, díky kterému hash dokážeme získat. Při načtení stránky pak jen zkontrolujeme, jestli jsme na adrese našeho endpointu, zkusíme najít hash, pokud ho najdeme, přesměrujeme na původní URL.
Výsledek
Jak to celé funguje v praxi? Podívejte se na yot.cz a zkuste si zkrátit nějakou svou URL. Můžete také použít API, stačí zavolat adresu https://yot.cz/wp-json/wpus/v1/shorten?url=https://yoururl.com
, vrátí se JSON s parametrem short_url
. Na URL pak stačí kliknout pro zkopírování do schránky.
Možných rozšíření je samozřejmě celá řada: administrace pro správu URL, mazání URL po určité době, autentifikace API, rate limiting atd. Pokud budete mít zájem o podobné řešení pro Váš web, neváhejte mě kontaktovat.
Václav Greif se programování pro Wordpress věnuje více než 16 let. Za tu dobu nasbíral mnoho zkušeností s tvorbou pluginů pro Wordpress, úpravou šablon a programováním komplexních funkcionalit. Věnuje se programování pro Wordpress a školení programátorů.