Jak zajistit, aby se váš WordPress plugin nahrál jako poslední - Affinite.io CZ

Tento snippet, podobně, jako ostatní, vznikl z potřeby vyřešení problému. Konkrétně bylo nutné ze šablony přenést funkce do pluginu a zajistit, aby se nahrál, jako poslední.

Proč poslední?

Protože, pokud píšete plugin, jenž má upravovat fungování, nebo zobrazování jiného pluginu, může se stát, že globální proměnné, nebo konstanty, nejsou dostupné.

Tento případ nastane, pokud je váš plugin načten dříve, než ten „zdrojový“.

Aby jsme náš plugin načetli poslední, musíme změnit pole, v option active_plugins.

Nejprve vytvoříme path našeho pluginu:

$path = str_replace( WP_PLUGIN_DIR . '/', '', __FILE__ );

WordPress totiž ukládá aktivní plugin do pole, kde hodnoty pole jsou složka pluginu + název hlavního souboru pluginu:

muj-plugin/muj-plugin.php

Nyní musíme načíst seznam aktivních pluginů:

$plugins = get_option( 'active_plugins' );

Protože vím, že plugin je aktivní a je uložen v poli, najdeme jeho klíč:

$key = array_search( $path, $plugins );

Protože jsme získali klíč, záznam smažeme:

array_splice( $plugins, $key, 1 );

Vezmeme náš $path a „přilepíme“ ho na konec pole, jako poslední záznam:

$plugins[] = $path;

A nakonec přeuložíme option:

update_option( 'active_plugins', $plugins );

Celá funkce pak vypadá následovně:

function my_plugin_load_last()
{
   $path = str_replace( WP_PLUGIN_DIR . '/', '', __FILE__ );
     if ( $plugins = get_option( 'active_plugins' ) ) {

        if ( $key = array_search( $path, $plugins ) ) {

           array_splice( $plugins, $key, 1 );
           $plugins[] = $path;
           update_option( 'active_plugins', $plugins );

        }
    }
}

A samozřejmě, musíme funkci „zavěsit“ do příslušného hooku:

add_action( 'activated_plugin', 'my_plugin_load_last' );

Tím jsme docílil, že se náš plugin načte až úplně poslední.

 

Pozvánka na WordPress Weekend
Pozvánka na WordPress Weekend
26 Dub, 2016
Jak vyřešit chybu internal server 500 error ve WordPressu
Jak vyřešit chybu internal server 500 error ve WordPressu
28 Dub, 2016

Looking for something?