2012-04-17 78 views
1

我打算在我的WordPress站点上更新电子商务插件(Shopp),并要求我停用它。一旦我做到了,我就失去了整个网站。 我想通过php文件激活插件,但不知道我在做什么,并希望得到一些帮助。 有谁知道我可以通过php文件激活我的网站上的Shopp插件(或任何插件)?需要通过php文件激活一个WordPress插件的插件


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

$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; 

回答

5

的活动插件不存储在一个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 
+0

好,所以我有seralized字符串,之后,你失去了我。你能给我一个例子,说明如何使用array_push()将PHP反序列化函数放在option_value上?如果你想要的话,我有这个字符串。 – Sophie 2012-04-17 17:05:01

+1

@Sophie看到我的编辑。 – 2012-04-17 17:17:11

+0

我是否直接在phpMyAdmin中使用字符串的option_value框? @KemalFadillah – Sophie 2012-04-17 17:18:05

1

对于如何以编程方式激活和停用插件上this site细节。这里是一个片段:

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); 
    } 
} 
+0

这是否必须在我添加到我的网站的一个新的PHP文件? – Sophie 2012-04-17 16:11:49

+0

我更新了我的问题,因为这是不工作的,我不断收到:致命错误:调用未定义函数add_filter()在/home/p00chw3b/public_html/wp-admin/includes/plugin.php在线1652 @Robbie – Sophie 2012-04-17 16:36:41

+0

@Sophie看起来像我稍微迟到了这次谈话。听起来像你得到它排序虽然。顺便说一句,你需要1.改变你的插件的路径,并2.将此代码添加到任何文件(例如functions.php),然后添加一个调用函数,以便它被执行。它应该已经切换插件的激活状态。 – Robbie 2012-04-17 18:27:08

1

大家谁都有作用的一个插件怪异

停用,激活,安装之后被锁定时,更新插件以重新访问您的网站的最简单方法:

  • 转到您的虚拟主机提供商adminpanel(交友,管理向导)
  • 转到文件(文件管理器)
  • 转到// wp-content /并将您的“插件”文件夹重命名为“plugins_off”

  • 转到您的WP-admin。您将可以再次访问,但无法看到插件。

  • 返回到您的webhost adminpanel并将“plugins_off”重新命名为“plugins”。

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

没有必要添加PHP代码。

0

这里是工作的代码 (只是取消注释“激活”行):

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(); 
1

像RST写道:无需编码,以恢复网站停用一个插件后坠毁。网站崩溃的原因很充分,因为其他插件依赖于停用的插件(如WooCommerce)。

恢复网站并访问WP管理员的最简单方法是重命名插件文件夹,刷新页面,返回并将文件夹重命名回“插件”,然后再次点击刷新。所有插件将像以前一样回来,只有它们全部停用。现在,您只需要再次激活它们即可。一个一个地做,确保没有其他崩溃。