Come posso chiamare una funzione da un plugin all'interno di un altro plugin?

30 giu 2012, 21:01:36
Visualizzazioni: 30.1K
Voti: 8

Ho un plugin base nel pannello delle opzioni di amministrazione per gli eventi.

Voglio chiamare una funzione che proviene da un plugin diverso per i social media (Mingle). Posso chiamare le funzioni del plugin nel tema, ma non sembra possibile farlo nei file core di altri plugin o nei pannelli di amministrazione di altri plugin.

Ho provato a includere i file dell'altro plugin, aggiungere un hook al file functions del tema, utilizzare add_action, add_filter, init ecc. Ma non so quale dovrebbe essere il primo argomento per queste azioni, dato che voglio inserire la funzione in una specifica pagina di amministrazione di un altro plugin.

L'unica soluzione che ha funzionato è stata quella di unire il codice dei due plugin, anche se sembra strano che non ci sia un metodo più semplice.

1
Commenti

Inoltre, entrambi i plugin dichiarano le loro funzioni in una classe

Graham Graham
30 giu 2012 21:14:12
Tutte le risposte alla domanda 2
0
11

Potresti provare a chiamare le funzioni del tuo plugin utilizzando l'azione plugins_loaded.

Plugin A

class PluginA {
  public function func_a() {
    // fai qualcosa
  }
}

Plugin B

class PluginB {
  function functB() {
    if (class_exists('PluginA')) {
      //fai qualcosa che dipende da PluginA
    }
  }
}

add_action('plugins_loaded', 'call_plugin_a_using_plugin_b');
function call_plugin_a_using_plugin_b() {
  PluginB::functB();
}

Secondo il Codex, l'azione plugins_loaded viene attivata dopo che tutti i plugin sono stati caricati, quindi assicurarsi che tutti i plugin siano caricati prima di chiamare una funzione da un altro plugin potrebbe essere la strada da percorrere.

19 ago 2016 18:37:44
0

Per chiamare una funzione da un plugin in un altro plugin (inception?), puoi provare con la seguente logica:

Puoi verificare se la funzione che desideri esiste prima di fare qualsiasi altra cosa.

Plugin A:

function from_plugin_alpha( some_thing ) {
    // esegui operazioni
}

Plugin B:

function from_plugin_bravo() {
    if ( !function_exists( 'from_plugin_alpha' ) ) {
        return;
    }
    from_plugin_alpha( some_thing );
}

Questo controlla che la funzione esista prima di eseguire il tuo codice personalizzato.

19 ago 2016 17:45:04