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.

Přidat komentář