Perché activ_plugin non funziona in register_activation_hook


10

Sto provando ad attivare automaticamente il secondo plug-in durante l'attivazione del primo plug-in.

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

Non funziona all'interno di register_activation_hook .. Funziona se lo uso direttamente come:

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

Come posso ripararlo? Grazie per l'aiuto

Soluzione:

Sto usando questo per me stesso ora:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

Ho letto male il tuo post in origine. Devo dire che è formattato correttamente. Questa funzione è nel principale del tuo plugin?
Chris,

Solo un secondo. Devo modificare il mio post.
Chris,

sì, è nel primo plugin che cerca di attivare il secondo plugin .. il secondo plugin è ciao.php come esempio
Ünsal Korkmaz

Risposte:


8

Per una spiegazione completa di ciò che sta accadendo, consulta questo post (questo serve per disattivare i plug-in, ma il problema è lo stesso).

Una breve spiegazione: i plug-in vengono attivati ​​essenzialmente aggiungendoli all'array di pug-in attivi memorizzati nel database. Quando si attiva il primo plug-in, WordPress recupera l'array di tutti i plug-in attualmente attivi, aggiunge il plug-in (ma non aggiorna ancora il database) e quindi esegue il callback dell'installazione.

Questo callback di installazione esegue il tuo codice.

Successivamente, WordPress aggiorna il database con l'array sopra, che contiene il primo ma non il secondo plug-in. Pertanto il secondo plug-in sembra non essere attivato.

Soluzione: ha menzionato nel link sopra la soluzione è qualcosa del genere (non testato):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

Se hai tempo, modifico la mia domanda per scrivere quello che sto usando ora. Puoi vedere activ_plugin ($ dipendente); non funziona quando si attiva il plugin. Qualche idea su come risolverlo?
Ünsal Korkmaz,

Copia del codice in un plug-in di test (e creazione di un altro hello.phpplug-in di test di test - per me funziona benissimo). Ricorda che se i plug-in esistono in una sottodirectory, dovrai fornire la cartella: ad es hello/hello.php.
Stephen Harris,

il mio codice funzionerà normalmente .. il problema inizia quando si cambia activate_plugin('hello.php');riga conactivate_plugin($dependent);
Ünsal Korkmaz

Questo perché la variabile fornita al callback non è hello.phpma l'array dei plug-in attualmente attivi. Non è possibile passare le proprie variabili a callback come quello. A meno che tu non usi variabili di classe / globali che dovrai usare activate_plugin('hello.php');. Ma questo non dovrebbe essere un problema ...?
Stephen Harris,

beh, non mi piace scrivere le stesse variabili in molti posti. ma non è un grosso problema. grazie mille
Ünsal Korkmaz,

2

Ecco qualcuno che spiega perché non funzionava per lui e come doveva copiare il metodo activ_plugin e crearne uno personalizzato senza il problema: /programming/1415958/how-to- activate-wordpress-plugin-internamente

Ecco la fonte originale del codice activ_plugin, che puoi usare per creare la tua funzione e vedere dove non funziona per te: http://hitchhackerguide.com/2011/02/11/activate_plugin/

Ecco una possibile soluzione, contenente un metodo di attivazione plug-in alternativo che probabilmente qualcun altro ha sottratto al codice sorgente: Come attivare i plug-in tramite codice?


quella soluzione non funziona ancora in register_activation_hook
Ünsal Korkmaz

Bene per fortuna, ora che hai il tuo metodo per attivare un plugin, dovresti essere in grado di eseguire il debug e capire dove sta fallendo, giusto? :) Hai modificato register_activation_hook per utilizzare il tuo metodo activ_plugin personalizzato invece di quello predefinito? In tal caso, inserisci alcune istruzioni trigger_error e scopri dove sta fallendo. Ad esempio, un buon punto di partenza sarebbe scoprire quale metodo verrà restituito in caso di errore.
mltsy,

Ho fatto del mio meglio per il debug ma non sono riuscito a trovare la ragione. Forse l'opzione active_plugins sta ottenendo l'aggiornamento dopo l'esecuzione di register_activation_hook.
Ünsal Korkmaz,

Mi dispiace, ho appena corretto l'ordine dei due collegamenti che avevo scambiato (gli ultimi due). Stai utilizzando il codice dal link intitolato "Come attivare il plug-in tramite codice?" Un altro suggerimento utile da fornire sarebbe il valore di ritorno del activate_pluginmetodo predefinito . È possibile utilizzare trigger_errorper trovare il valore restituito e pubblicarlo qui.
mltsy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.