如何检查WordPress是否正在更新插件?

时间:2014-01-08 作者:Q Studio

我在一些插件的开头做了一个简单的依赖性检查,检查是否安装了另一个插件并处于活动状态(使用class_exists()).

这在正常的WordPress流程中效果很好,因为包含所需类的插件被设置为更早实例化,我还重新排序了可用的插件,以便首先加载该插件,如下所示:

    /**
     * Force this plugin to load first
     * 
     * @since   0.1
     * @return  void
     */
    public function load_this_plugin_first() 
    {

        // grab plugin directory + file name ##
        $path = plugin_basename(dirname(__FILE__)).\'/\'.basename(__FILE__);

        // grab the list of active plugins ##
        if ( $plugins = get_option( \'active_plugins\' ) ) {

            // check if out plugin is in there ##
            if ( $key = array_search( $path, $plugins ) ) {

                // push it to the top of the list ##
                array_splice( $plugins, $key, 1 );
                array_unshift( $plugins, $path );
                update_option( \'active_plugins\', $plugins );

            }

        }

    }
这一切都很好,直到我需要更新一个插件-然后其他插件都被停用-因为所有class_exists() 检查返回false。

所以,我想知道是否有一个常量,比如为插件更新执行\\u AUTOSAVE,比如执行\\u plugin\\u UPDATE?

2 个回复
最合适的回答,由SO网友:Otto 整理而成

与其按照特定的顺序重新排序加载插件,不如让每个需要加载其他插件的插件将其初始化推迟到“plugins\\u-loaded”操作挂钩。

换句话说,当包含并运行具有依赖关系的插件时,它不应该直接执行任何操作。相反,它应该具有函数,然后添加\\u操作调用以将这些函数挂接到加载的插件。稍后调用的函数可以执行类\\u exists检查并相应地执行操作。

SO网友:Q Studio

使用WP\\U安装如何?-此检查位于主插件类上方。。。

if ( ! class_exists( \'REQUIRED_CLASS_NAME\' ) && ! defined( \'WP_INSTALLING\' ) )  { 

    // give some notice to the user ##
    add_action(\'admin_notices\', function(){
        $plugin = get_plugin_data( __FILE__ );
        echo "<div id=\'message\' class=\'error\'><p><code>".$plugin["Name"]."</code> has been deactivated because it requires the <a href=\'#\'>PLUGIN NAME</a>.</p></div>";
        if ( isset( $_GET[\'activate\'] ) ) {
            unset( $_GET[\'activate\'] ); // remove the activation notice ##
        }
    });

   // turn this plugin off ##
   add_action(\'admin_notices\', function(){
      deactivate_plugins( plugin_basename( __FILE__ ) );
   });

   // stop this plugin from running ##
   return;
}
那么实际的插件类如下:

if ( ! class_eixsts( "Plugin_Class" ) ) 
{ 
    Plugin_Class() 
    { 
      ... 
    } 
}

结束

相关推荐

Settings API repeater fields

我是WP设置API的新手,也是一个相当新手的PHP开发人员。为了开始,我遵循了这个很棒的教程Using Settings API - part 1 — Create a Theme Options Page并根据我的需要进行定制。一切都很顺利。遗憾的是,我找不到有关创建用户动态重复字段的在线参考,例如幻灯片放映中的“添加新幻灯片”。我觉得我真的很接近,但我不知道如何注册新内容。我会感谢你给我的建议或指引我正确的方向。