since.2006  

(一)中讲到了wordpress是如何读取系统中所有插件的。

现在我们来看看她是如何激活及停用插件的。

激活及停用插件

wordpress的当前使用的插件列表存放在数据库中,wp_options表,字段option_name值为active_plugins的列存放的就是当前系统中使用的插件。
a:2:{i:0;s:9:"hello.php";i:1;s:16:"wp-db-backup.php";}
就是当前系统中使用的两个插件Hello Dolly、WordPress Database Backup。
这个字段原有类型是array,经过serialize后存放在数据库中,读出时unserialize。

取得当前系统中使用的插件 functions.php | 273行 | function get_settings($setting) {}

  1.     // 这个方法是通用方法,不光是用来读取当前使用插件   
  2.     // 当 $setting = active_plugins 时读取当前使用的插件   
  3.     $row = $wpdb->get_row("SELECT option_value FROM $wpdb->options WHERE option_name = '$setting' LIMIT 1");   
  4.        
  5.     // ......   
  6.   
  7.     ifis_object$row) ) {   
  8.         $value = $row->option_value;   
  9.         // 存入缓存中,下次直接从缓存中取值不用再查询数据库   
  10.         wp_cache_set($setting$value'options');   
  11.     }   
  12.        
  13.     // 对于active_plugins,只是将值unserialize返回   
  14.     return apply_filters( 'option_' . $setting, maybe_unserialize($value) );   
  15.        
  16.     // unserialize前的值   
  17.     // a:2:{i:0;s:9:"hello.php";i:1;s:16:"wp-db-backup.php";}   
  18.   
  19.     // unserialize后的值   
  20.     /*  
  21.     Array  
  22.     (  
  23.         [0] => hello.php  
  24.         [1] => wp-db-backup.php  
  25.     )  
  26.     */  

激活插件

通过链接plugins.php?action=activate&plugin=hello.php
wp-admin/plugins.php | 5行左右 |

  1. // 取得当前系统中使用的插件   
  2. $current = get_settings('active_plugins');   
  3. // 待激活插件不在已激活插件列表中   
  4. if (!in_array($_GET['plugin'], $current)) {   
  5.     // 将新插件添加到已激活插件列表中   
  6.     $current[] = trim( $_GET['plugin'] );   
  7.     sort($current);   
  8.     // 将当前正在使用的插件存放到数据库中   
  9.     // 对于active_plugins,只是将当前使用的插件列表serialize后存放进数据库   
  10.     update_option('active_plugins'$current);   
  11.        
  12.     // ......   
  13. }  

停用插件

通过链接plugins.php?action=deactivate&plugin=hello.php
wp-admin/plugins.php | 16行左右 |

  1. // 取得当前系统中使用的插件   
  2. $current = get_settings('active_plugins');   
  3. // 先搜索待停用插件在使用插件中的位置,再将插件列表这部分内容去掉   
  4. array_splice($currentarray_search$_GET['plugin'], $current), 1 );   
  5. // 将删除待停用过后的插件列表存放到数据库中   
  6. // 对于active_plugins,只是将当前使用的插件列表serialize后存放进数据库   
  7. update_option('active_plugins'$current);   
  8.   
  9. // ......  
标签:

Posted by hee at 12:04 PM | Permalink | 评论(0) | PHP

请输入名称
请输入邮件地址

 

    请输入邮件地址