Quando falamos de plugins instalados numa rede WordPress multisite, alguns plugins podem ser activados para utilização por toda a rede, enquanto outros só podem ser activados num único site específico.
Plug-ins activados pela rede:
O mesmo plugin ativado para um site específico:
Compreender como funciona não deve ser muito difícil, mas podemos ter problemas quando tentamos verificar no código se um plugin está ativado para toda a rede ou apenas para um site específico.
Existem muitas formas diferentes de o conseguir, cada uma com as suas caraterísticas próprias.
is_plugin_active_for_network()
Se um plugin estiver ativado para toda a rede, esta função devolverá true (verdadeiro). Assim, por exemplo, se utilizarmos esta função no sítio 1 e o nosso plugin só estiver ativado no sítio 1 e não estiver definido para ser ativado em toda a rede, então esta função devolverá false (falso).
if( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) {
// O WooCommerce está ativado para a rede.
} else {
// O WooCommerce não está ativado na rede.
}
is_plugin_active()
Esta função é útil porque desempenha duas funções:
- Verificará se o plugin está ativado apenas no sítio que está a utilizar atualmente.
- Também verifica se o plugin está definido para estar ativo em toda a rede.
Devolve true (verdadeiro) se pelo menos uma destas duas condições for válida.
if( is_plugin_active( 'woocommerce/woocommerce.php' ) {
// O WooCommerce está ativado neste sítio específico ou está ativado na rede.
) { // O WooCommerce está ativado neste sítio específico ou está ativado na rede.
Pode ter a certeza de que esta funcionalidade também é segura em ambientes de rede sem múltiplos sites.
Verifique se o plugin está ativo apenas num site específico
Uma vez que esta funcionalidade não está disponível no núcleo do WordPress, tenho o seguinte código personalizado para si:
if( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) {
}
Pode verificar sites específicos numa rede multisite, mas não se esqueça de fornecer o $blog_id
responder com cânticos $plugin
Variáveis.
switch_to_blog( $blog_id ).
if( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) {
}
restore_current_blog() ;
Verifique em que sítios um determinado plugin (no nosso caso, o WooCommerce) está ativo:
$sites = get_sites();
foreach( $sites as $site ) {
switch_to_blog( $site->blog_id );
if( in_array( 'woocommerce/woocommerce.php', (array) get_option( 'active_plugins', array() ) {
echo "WooCommerce está ativo em {$site->blogname}";
}
restore_current_blog(); }
resumos
Em suma, quer utilizeis_plugin_active()
no entantois_plugin_active_for_network()
Em ambos os casos, o WordPress verifica se os plug-ins estão activados nas opções do site:
Não se preocupe com a utilização excessiva da base de dados, uma vez que estas opções são carregadas automaticamente e se utilizar a opçãois_plugin_active()
só irá verificar a partir de uma variável global.
Os valores das opções na base de dados são, na verdade, uma matriz serializada, como a seguinte: