需要通过 php 文件激活 wordpress 站点的插件


Need to activate a plugin for a wordpress site through the php files

我打算在我的wordpress网站上更新电子商务插件(Shopp),它要求我停用它。 一旦我这样做了,我就失去了整个网站。我正在尝试通过 php 文件激活插件,但不确定我在做什么,并希望得到一些帮助。有谁知道如何通过 php 文件激活我网站上的 Shopp 插件(或任何与此相关的插件)?


这是我用来获取字符串的代码:

    $unserialized = unserialize('a:14:{i:0;s:19:"akismet/akismet.php";i:1;s:37:"breadcrumbs-plus/breadcrumbs-plus.php";i:2;s:35:"googleanalytics/googleanalytics.php";i:3;s:45:"grunion-contact-form/grunion-contact-form.php";i:4;s:43:"image-caption-links/image-caption-links.php";i:5;s:29:"image-widget/image-widget.php";i:6;s:13:"rate/rate.php";i:7;s:33:"restore-jquery/restore-jquery.php";i:8;s:41:"shopp-cache-helper/shopp-cache-helper.php";i:9;s:47:"shopp-default-breadcrumb-extender-sdbe/sdbe.php";i:10;s:33:"shopp-improved/shopp-improved.php";i:11;s:19:"shuffle/shuffle.php";i:12;s:19:"vslider/vslider.php";i:13;s:41:"wordpress-importer/wordpress-importer.php";}');
array_push($unserialized, 'shopp/shopp.php');
$serialized = serialize($unserialize);
echo $serialized;

活动插件不存储在 PHP 文件中。它存储在数据库中。打开数据库中的wp_options表。查找option_name字段的值active_plugins的行。在此行中,查找 option_value 的值。您将看到一个序列化字符串,其中包含活动插件的信息。

现在,直接编辑字符串可能会有点混乱,特别是如果您不熟悉序列化字符串的格式。因此,我建议您复制字符串并在其上使用 PHP unserialize() 函数,然后返回一个数组。之后,使用 array_push() 添加另一个元素,其中的值是插件文件的路径(例如"akismet/akismet.php",在您的情况下可能是"shopp/shopp.php")。添加另一个元素后,使用 serialize() 并复制返回的字符串并替换数据库中的旧序列化字符串。

$unserialized = unserialize('...');
array_push($unserialized, 'shopp/shopp.php');
$serialized = serialize($unserialized);
echo $serialized; // Copy this output back into the database

此站点上有有关如何以编程方式激活和停用插件的详细信息。下面是一个片段:

function toggle_plugin() {
    // Full path to WordPress from the root
    $wordpress_path = '/full/path/to/wordpress/';
    // Absolute path to plugins dir
    $plugin_path = $wordpress_path.'wp-content/plugins/';
    // Absolute path to your specific plugin
    $my_plugin = $plugin_path.'my_plugin/my_plugin.php';
    // Check to see if plugin is already active
    if(is_plugin_active($my_plugin)) {
        // Deactivate plugin
        // Note that deactivate_plugins() will also take an
        // array of plugin paths as a parameter instead of
        // just a single string.
        deactivate_plugins($my_plugin);
    }
    else {
        // Activate plugin
        activate_plugin($my_plugin);
    }
} 

对于每个有插件行为奇怪的人

停用、激活、安装、更新插件后被锁定时,重新获得对站点的访问权限的最简单方法是:

  • 转到您的虚拟主机管理面板(Cpanel,DirectAdmin)
  • 转到文件(文件管理器)
  • 转到//wp-content/并将您的"插件"文件夹重命名为其他名称,例如"plugins_off"

  • 转到您的WP管理员。您将再次访问,但没有可见的插件。

  • 返回您的虚拟主机管理面板并将"plugins_off"重命名回"插件"。

现在,您的插件将全部在WP-admin中再次列出,但全部已停用。从那里拿走它。

无需添加 PHP 代码。

就像RST写的那样:无需编码即可恢复停用插件后崩溃的网站。该网站崩溃是有充分理由的,因为其他插件依赖于该停用的插件(如WooCommerce)。

恢复站点并获得WP管理员访问权限的最简单方法是重命名插件文件夹,刷新页面,返回并将文件夹重命名为"插件",然后再次点击刷新。所有插件都将像以前一样恢复,只是它们都被停用了。现在您需要做的就是再次激活它们。一个接一个地做,以确保没有其他崩溃。

这是工作代码(只需取消注释"激活"行):

function MY_toggle_plugins() {
    include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
    $temp_files1 = glob(WP_PLUGIN_DIR.'/*'); 
    $activated=array();
    $already_active=array();
    foreach($temp_files1 as $file1){
        if(is_dir($file1)) { 
            $temp_files2 = glob($file1 . '/*');
            foreach($temp_files2 as $file2){
                if(is_file($file2) && stripos(file_get_contents($file2),'Plugin Name:')!==false) { 
                    $plugin_name_full=basename(dirname($file2)).'/'.basename($file2);
                    if(is_plugin_active($plugin_name_full)) {
                        array_push($already_active, $plugin_name_full); 
                        //deactivate_plugins($plugin_name_full);
                    }
                    else{
                        array_push($activated, $plugin_name_full);
                        //activate_plugin($plugin_name_full);
                    }
                }
            }
        }
    }
    echo 'You have activated these plugins:<br/><br/>'.serialize($activated).'<br/><br/>These were already active:<br/><br/>'.serialize($already_active); exit;
} 
//execute
MY_toggle_plugins();