【问题标题】:Need to activate a plugin for a wordpress site through the php files需要通过 php 文件激活 wordpress 站点的插件
【发布时间】:2012-04-17 15:11:02
【问题描述】:

我打算在我的 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 wordpress function plugins


    【解决方案1】:

    活动插件不存储在 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
    

    【讨论】:

    • 好的,所以我有序列化的字符串,之后你失去了我。你能给我一个例子,说明 PHP 非序列化函数如何使用 array_push() 放在 option_value 上?如果你想要的话,我有字符串。
    • 我是否直接在带有字符串的 option_value 框所在的 phpMyAdmin 上执行所有这些操作? @KemalFadillah
    • @Sophie 在 PHP 中运行上述代码。只需创建一个随机文件并将上面的代码粘贴到其中。并确保将... 替换为数据库中的序列化字符串。然后,运行文件并将输出粘贴到数据库中;替换旧的序列化字符串。
    • @KernalFadillah 这就是我得到的一切.. i:15;这是我用来运行它的网址:serialize string
    • @Sophie 你能发布原始的序列化字符串吗?
    【解决方案2】:

    this site 上有关于如何以编程方式激活和停用插件的详细信息。这是一个sn-p:

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

    【讨论】:

    • 这是否必须在我添加到我的网站的新 php 文件中?
    • 我更新了我的问题,因为由于某种原因这不起作用我不断收到:致命错误:调用 /home/p00chw3b/public_html/wp-admin/includes/plugin 中的未定义函数 add_filter()。 php 上线 1652 @Robbie
    • @Sophie 看起来我回到这个对话有点晚了。听起来你已经整理好了。顺便说一句,您将需要 1. 更改插件的路径和 2. 将此代码添加到任何文件(例如 functions.php),然后添加对该函数的调用以便执行它。它应该已经切换了插件的激活状态。
    • 感谢您的这篇文章!
    【解决方案3】:

    适合所有插件行为怪异的人

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

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

    • 转到您的 WP 管理员。您将可以再次访问,但看不到任何插件。

    • 返回您的虚拟主机管理面板,将“plugins_off”重命名为“plugins”。

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

    无需添加PHP代码。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-20
          • 2023-04-04
          • 2014-11-05
          • 1970-01-01
          • 2023-03-11
          • 2017-11-11
          • 1970-01-01
          • 2019-05-21
          相关资源
          最近更新 更多