Plugin na propojení účtu Zoner a WordPressu – chráněný obsah

Firma Zoner, výrobce skvělého grafického softwaru na úpravu fotografií, mě oslovila, abych pro ně realizoval propojení účtu Zoner a jejich webů na WordPressu.

Propojení funguje poměrně jednoduše: na webu zoner.cz jsem přidal možnost u článků zvolit, že oprávnění k zobrazení článku mají jen uživatelé s platnou licencí Zoner. Pokud uživatel klikne na článek, je přesměrován na přihlášení na https://account.zoner.com, po přihlášení se přesměruje zpět do WordPressu s platným tokenem, ten se zpětně ověří přes API a získají se informace o uživateli a o tom, zda má platnou licenci.

Pokud se uživatel do WordPressu pokouší přihlásit poprvé, automaticky se mu vytvoří nový účet a nastaví správná oprávnění, pokud již uživatel existuje, aktualizují se informace o jeho licenci.

Pokud má platnou licenci, článek se zobrazí, pokud ne, zobrazí se informace o tom, že článek je přístupný jen uživatelům s platným oprávněním.

Požadavků na funkcionalitu „Některý obsah na webu je přístupný jen některým skupinám uživatelů“ jsem za poslední dobu řešil několikrát, a téměř vždy pro tuto funkcionalitu používám filtr the_content, který umožňuje dynamicky měnit obsah článku / stránky. Tento filtr se hodí například i na dynamické vložení reklamy AdSense do článku nebo stránky.

Kód, který zajišťuje skrývání obsahu pro uživatele bez platné licence, tedy zjednodušeně vypadá cca takto:

 

// This is inside a class
add_filter('the_content', array($this, 'hide_if_no_subscription'));
function hide_if_no_subscription($content)
    {
        $user = new User();
        $user->user_id = get_current_user_id();
        // If the article needs a valid subscription and the user does not have it and is logged out
        if ($this->needs_valid_zpsx() && !$user->has_valid_zpsx() && !is_user_logged_in()) {
          // display some message  
          return $this->logged_out_message();
        } else if ($this->needs_valid_zpsx() && !$user->has_valid_zpsx()) {
            // if the user is logged in, but does not have a valid subscription, display different message
            return $this->not_valid_license_message();
        }
        
        // The checks passed, return the original content
        return $content;
    }

// Check if subscription is needed to access the post
function needs_valid_zpsx()
    {
        global $post;
        return get_post_meta($post->ID, '_zwp_zpsx_only', true) == 'on';
    }

Součástí pluginu je samozřejmě i nastavení zpráv pro uživatele, aktualizace údajů přes API, pokud se uživatel přihlásí po více než 24 hodinách, shortcode pro zamykání obsahu přímo ve stránce a spousta dalších funckionalit.

Pokud potřebujete podobné řešení, nebo jiné úpravy WordPressu, neváhejte se na mě obrátit.

Přidat komentář