插件单击按钮激活其他插件

时间:2020-04-19 作者:MarkBill3000

我有一些代码在后端页面中有一个按钮。

我想点击按钮,让它激活一个已经在插件目录中的插件。

代码如下:

<?php


add_action(\'admin_menu\', \'addons_plugin_setup_menu\');

function addons_plugin_setup_menu(){
        add_menu_page( \'Addons\', \'Addons\', \'manage_options\', \'addons-plugin\', \'addons_init\' );
}

function addons_init(){
        ?>


        <div class="container-fluid" style="margin-top: 30px">
                <div class="row">
                        <div class="col-md-12">
                                <nav class="navbar navbar-default">
                                        <div class="container-fluid">
                                                <div class="navbar-header">
                                                        <h4>Addons</h4>
                                                        <br><br>
                                                        <button class="btn btn-success" onclick="testme()">Activate</button>
                                                </div>
                                        </div>
                                </nav>
                        </div>
                </div>
        </div>

        <?php
}

function testme() {
    activate_plugin( \'plugin-dir/plugin-file.php\' );
    if ( is_wp_error( $result ) ) {
        // Process Error
    }
}


?>
单击按钮时,未定义“testme”

我怎样才能让它工作?

Updated to this:

<?php

add_action(\'admin_menu\', \'addons_plugin_setup_menu\');

function addons_plugin_setup_menu(){
        add_menu_page( \'Addons\', \'Addons\', \'manage_options\', \'addons\', \'addons_init\' );
}

function addons_init(){
        ?>

        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
        <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>


        <script type="text/javascript">
          jQuery( document ).ready( function($) {
              $( \'#activate_plugin\' ).on( \'click\', function(e) {
                  e.preventDefault();
                  var ajaxurl     = \'<?php echo admin_url( "admin-ajax.php" ); ?>\';
                  var security    = \'<?php echo wp_create_nonce( "activate_plugin" ); ?>\';
                  $.ajax( {
                      url: ajaxurl,
                      dataType: \'json\',
                      type: \'POST\',
                      delay: 150,
                      data :\'action=activate_plugin&security=\'+security,
                      success: function( data ) {
                          console.log( data + \', Plugin Activated!\' );
                      },
                  } );
              } );
          } );
        </script>


        <div class="container-fluid" style="margin-top: 30px">
                <div class="row">
                        <div class="col-md-12">
                                <nav class="navbar navbar-default">
                                        <div class="container-fluid">
                                                <div class="navbar-header">
                                                        <h4>Addons</h4>
                                                        <br><br>
                                                        <button id="activate_plugin" class="btn btn-success">Activate</button>
                                                </div>
                                        </div>
                                </nav>
                        </div>
                </div>
        </div>

        <?php
    function activate_plugin_ajax_callback() {
        check_ajax_referer( \'activate_plugin\', \'security\' );
        activate_plugin( \'ttt/index.php\' );
        if( is_wp_error( $result ) ) {
            // Process Error
        }
    }
    add_action( \'wp_ajax_activate_plugin\', \'activate_plugin_ajax_callback\' );
?>

        <?php
}

?>

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

所以我做了几件事。首先,我在HTML按钮中添加了一个ID,以便在同一个类中有多个按钮执行不同的操作的情况下简化操作。

然后,我编写了一个快速而简单的小AJAX函数-实际上不需要传递太多数据,它只需要向WP验证自己,以便WP知道允许它执行该函数。

然后我用php编写了另一个函数,基本上激活了插件。

<!-- //ADDED AN ID TO THE BUTTON -->
<button id="activate_plugin" class="btn btn-success">Activate</button>

<!-- //THE AJAX -->
<script type="text/javascript">
jQuery( document ).ready( function($) {
    $( \'#activate_plugin\' ).on( \'click\', function(e) {
        e.preventDefault();
        var ajaxurl     = \'<?php echo admin_url( "admin-ajax.php" ); ?>\';
        var security    = \'<?php echo wp_create_nonce( "activate_plugin" ); ?>\';
        $.ajax( {
            url: ajaxurl,
            dataType: \'json\',
            type: \'POST\',
            delay: 150,
            data :\'action=activate_plugin&security=\'+security,
            success: function( data ) {
                console.log( data + \', Plugin Activated!\' );
            },
        } );
    } );
} );
</script>

<!-- //THE AJAX CALLBACK -->
<?php
    function activate_plugin_ajax_callback() {
        check_ajax_referer( \'activate_plugin\', \'security\' );
        activate_plugin( \'plugin-dir/plugin-file.php\' );
        if( is_wp_error( $result ) ) {
            // Process Error
        }
    }
    add_action( \'wp_ajax_activate_plugin\', \'activate_plugin_ajax_callback\' );
    add_action( \'wp_ajax_nopriv_activate_plugin\', \'activate_plugin_ajax_callback\' );
?>
你还可以做很多其他的小事情,比如如果插件已经激活了,那么就不要显示按钮。

<?php if( is_plugin_inactive( \'plugin-dir/plugin-file.php\' ) ) : ?>
<button id="activate_plugin" class="btn btn-success" onclick="testme()">Activate</button>
<?php else : ?>
<span class="activated-note">The XXX Plugin is installed and activated.</span>
<?php endif; ?>
您还可以将AJAX成功设置为删除按钮,并通过替换success AJAX的一部分包括:

success: function( data ) {
    console.log( data );
    alert( \'Plugin Activated!\' );
    $( \'#activate_plugin\' ).toggle();
    $( \'.navbar-header\' ).append( \'<span class="activated-note">The XXX Plugin is installed and activated.</span>\' );
},