Plugin ve třídě

Zvolené téma obsahuje celkem 5 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel  sjiamnocna a poslední změna je stará 10 let, 1 měsíc.

Aktuálně je na stránce zobrazeno 6 příspěvků - 1. až 6. (z celkem 6)
  • Autor
    Příspěvky
  • #19057

    sjiamnocna
    Participant
    Web

    Zdravím, mám problém se zprovozněním pluginu se třídou. Vše funguje dobře, jen když chci spustit plugin, musím volat vytvoření nové třídy (new PluginClass;), protože mi to bez toho nefunguje.

    Otázka zní: Je to tak normální, nebo jsem někde udělal něco špatně?

    class sidebarposts_plugin{
        public function sidebarposts_plugin(){
            
        }
    }
    //enqueue scripts and styles with class
    class enqueue extends sidebarposts_plugin{
        public function enqueue(){
            add_action('init',array($this,'initialize'));
            add_action('wp_enqueue_scripts',array($this,'enq_public'));
        }
        public function initialize(){
            wp_register_script('shposts',plugins_url().'/sidebar-posts/js/jq_shposts.js',array('jquery'));
            wp_register_style('shstyle',plugins_url().'/sidebar-posts/css/sbposts-style.css');
        }
        public function enq_public(){
            wp_enqueue_script('shposts');
            wp_enqueue_style('shstyle');
        }
        public function enq_admin(){
            
        }
    }
    new sidebarposts_plugin();
    new enqueue();

    a druhá věc: Při přidávání podtřídy se automaticky spustí konstruktor, nebo jej musím pouštět manuálně z předchozí třídy?

    Díky :)

    #19059

    Musilda
    Participant
    Web

    1. Je to tak normální, musíš vytvořit nějaký objekt, pokud s ním chceš pracovat.
    2. Pokud vytváříš třídu, která je extended pro jinou třídu, tak to není podtřída, ale třída, která rozšiřuje třídu rodičovskou (snad jsem to nevyjádřil neohrabaně). Jednoduše, ty nová třída má přístup k metodám rodičovské třídy, ale má i vlastní. Takže tím, že vytvoříš objekt nové třídy, máš přístup i k rodičovské třídě. Názvosloví je trochu jiné, ale takto to myslím na začátek jednoduše popisuje, jak to funguje.

    #19066

    sjiamnocna
    Participant
    Web

    Nevím, zda jsem v tomto směru natvrdlý, nebo co, ale co to pro mně znamená?
    znamená to, že pokud chci spustit konstruktor rodiče, musím vytvořit objekt, ale kostrukce dítěte se nespustí, a že musím také znovu tvořit objekt?

    Pokud vím, když jsem tvořil Widget pomocí extends, nic tam nebylo…

    #19069

    Musilda
    Participant
    Web

    Constructor rodiče se spustí automaticky, při volání child třídy. Takže stačí New OdvozenaTridaOdZakladniTridy()

    #19072

    admin
    Keymaster
    Web

    Musilda: Díky!

    Zájemcům bych doporučil velmi povedený seriál o objektovém programování pro WordPress. A samozřejmě jako příklad vzít WordPress Plugin Boilerplate, kde se toho opravdu hodně naučíte :-)

    class sidebarposts_plugin{

    Zde je pouze deklarace třídy, která sama o sobě nic nedělá.

    new sidebarposts_plugin();

    Teprve zde vytvoříte instanci deklarované třídy, tedy vlastně objekt, se kterým lze dále pracovat.

    Dále zmiňované rozšiřování tříd (extends) je vlastně definice jejich dědičnosti (inheritance). A u konstruktorů je třeba si dát pozor, pokud ho chcete předávat z rodičovské třídy (aneb použít dvojitou dvojtečku):

    parent::__construct();

    Vcelku dobře je to vysvětleno zde (česky).

    Ale v uvedeném příkladě by mělo stačit uvést new enqueue(); a new sidebarposts_plugin(); už je tam zbytečné.

    #19174

    sjiamnocna
    Participant
    Web

    Děkuji za info, mrknu na to :)

Aktuálně je na stránce zobrazeno 6 příspěvků - 1. až 6. (z celkem 6)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.