web-dev-qa-db-fra.com

Désactiver le plugin sur le thème

Je développe un plugin, appelons-le DahPlugin, qui fournit des options de personnalisation supplémentaires pour un thème gratuit que j'ai développé. Appelons ce thème DahTheme (je ne veux pas brancher l'un ou l'autre sans vergogne ici).

Donc, ce que j'essaie d'accomplir, c'est que je souhaite que DahPlugin soit automatiquement désactivé lorsque l'utilisateur change de thème. DahTheme .

J'ai trouvé cet extrait de code ici: désactiver les plugins actifs pour un thème spécifique , ce qui fonctionne vraiment bien si vous souhaitez désactiver les plugins si un certain thème est actif.

J'ai donc décidé de faire preuve d'intelligence et de l'utiliser dans mon thème pour changer de logique. J'ai donc changé l'opérateur de comparaison de == ( égal à ) en != ( différent de ) ... ma pensée: Si le nom du thème actuel n'est pas égal à " DahTheme ", puis désactivez " DahPlugin " et voici à quoi il ressemble:

if ( ! function_exists('disable_plugins')) :
    function disable_plugins(){
        include_once(ABSPATH.'wp-admin/includes/plugin.php');
        $current_theme = wp_get_theme();
        $current_theme_name = $current_theme->Name;

        if($current_theme_name == 'DahTheme'){
            if ( is_plugin_active('dahplugin/dahplugin.php') ) {
                deactivate_plugins('dahplugin/dahplugin.php');                          
            }
        }
    }
    add_action('after_switch_theme','disable_plugins');
endif;

Aaaaaaand ça ne marche pas ... lol! Bien sûr, cela se produit chaque fois que je pense que je suis intelligent.

Donc, je me suis creusé la tête et j’ai cherché partout pour essayer de comprendre ce qui ne fonctionnait pas ou pourquoi cela ne fonctionnait pas et je ne semble pas pouvoir le trouver non plus.

Quelqu'un peut-il me montrer pourquoi cela ne fonctionne pas et pourquoi ma ligne de pensée est fausse? Ce serait grandement apprécié.

Merci d'avance pour votre aide.

1
tsquez

Je n'ai pas testé cela, donc cela pourrait ne pas fonctionner correctement, mais l'essentiel de ce que vous essayez de faire est de vous accrocher au crochet after_switch_theme et de voir si le $old_name est DahTheme. Si c'est le cas, cela signifie que le thème actuel n'est pas DahTheme, vous souhaitez donc désactiver le plug-in.

function wpse_after_switch_theme( $old_name, $old_theme ) {
  if( 'DahTheme' === $old_name ) {
    //* You may or may not need to include wp-admin/includes/plugin.php here
    deactivate_plugins( 'dahplugin/dahplugin.php' );
  }
}
add_action( 'after_switch_theme', 'wpse_after_switch_theme', 10, 2 );
1
Nathan Johnson

Toute cette approche est à l'envers. Le problème n’est pas de désactiver le changement de thème, mais de s’assurer que le plug-in n’est disponible que si le thème pour lequel il a été créé est actif.

Donc, la vérification devrait être dans le plugin, pas le thème

Commençons donc par déterminer quel thème est actif, nous pouvons le faire via wp_get_themedocumenté ici

Nous enregistrons ensuite un hook dans notre plugin sur admin_init:

add_action( 'admin_init', function() {
    $theme = wp_get_theme();
} );

Ensuite, si le thème n'est pas le thème prévu, désactivez:

if ( $theme->headers['name'] !== 'DahTheme' ) {
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

Notez que deactivate_plugins est pluriel et nécessite un chemin absolu. En raison de l'utilisation de __FILE__, cette vérification doit être dans le fichier de plugin principal.


Bien que cela complique les choses lorsque vous revenez à "DahTheme" car le plug-in est inactif, il serait donc préférable de faire la vérification puis de revenir plus tôt, de sorte que le plug-in ne fait rien au lieu de le désactiver. Ainsi, aucune option de personnalisation n'est présentée pour les thèmes incompatibles et aucun problème ne survient lorsque l'utilisateur prévisualise les thèmes ou revient en arrière.

1
Tom J Nowell

J'ai essentiellement résolu ce problème en utilisant is_plugin_active - avant de charger d'autres panneaux et sections avec le plugin et lorsqu'un utilisateur choisissait un autre thème, le customize register créé par le plug-in était toujours présent et quand ils entrèrent dans le nouveau personnaliseur de thèmes, un élément fatal. une erreur a été générée.

Cela a corrigé le problème.

0
tsquez