我打算在我的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();