WordPress二次开发之以类的方式创建插件

为插件创建类主要是规范,避免与其他插件的方法重名,方便调用

定义插件类 以上一篇文章编写的插件为例

代码语言:javascript
复制
class my_change_font_style{

}

在构造方法调用HOOK

代码语言:javascript
复制
function __construct(){
//创建菜单
add_action('admin_menu',array($this,'my_create_menu'));

}

这里以字符串调用方法的方式与之前不同 array($this,'方法名称')

调用插件需要的方法并实例化类 我们将之前的插件精简如下

代码语言:javascript
复制
<?php
/*
Plugin Name:test_install
Description:这是描述
Author:tzh
Version:0.0.1
*/
// 创建菜单
class my_change_font_style{
public function __construct()
{
add_action('admin_menu',array($this,'my_create_menu'));
}
public function my_create_menu(){
//一级菜单
add_menu_page(
'字体颜色',
'字体颜色',
'manage_options',
'my_menus',
array($this,'my_settings_page')
);
}
public function my_settings_page(){
?>
<div class="wrap">
<h2>插件菜单</h2>
<form action="options.php" method="post">

       &lt;/form&gt;
    &lt;/div&gt;
    &lt;?php
}

}
new my_change_font_style();

打开后台程序正常执行

接下来我们将之前的插件转换为类的方式

代码语言:javascript
复制
<?php
/*
Plugin Name:test_install
Description:这是描述
Author:tzh
Version:0.0.1
*/
// 创建菜单
class my_change_font_style{
public function __construct()
{
add_action('admin_menu',array($this,'my_create_menu'));
add_action('admin_init',array($this,'register_my_test_setting'));
add_action('wp_head',array($this,'my_test_head_fun'));
}
public function my_create_menu(){
//一级菜单
add_menu_page(
'字体颜色',
'字体颜色',
'manage_options',
'my_menus',
array($this,'my_settings_page')
);
}
public function register_my_test_setting(){
//注册一个选项,用于装载所有插件设置项
$option_group = 'my_test_group';
register_setting($option_group,'my_test_option');

    //添加选项设置区域
    $setting_section = &#39;my_setting_section&#39;;//设置区域名称
    add_settings_section(
        $setting_section,
        &#39;设置&#39;,
        array($this,&#39;my_test_setting_section_function&#39;), //调用某方法,设置区域信息
        $option_group
    );
    //设置字段
    /**
     * 字段id
     * 字段标题
     * 输出字段的方法
     * 字段分组
     * 字段展示区域
     */ 
    add_settings_field(
        &#39;my_test_color&#39;,
        &#39;字体颜色&#39;,
        array($this,&#39;my_test_color_function&#39;),
        $option_group,
        $setting_section
    );
    //设置字段 字体大小
    add_settings_field(
        &#39;my_test_size&#39;,
        &#39;字体大小&#39;,
        array($this,&#39;my_test_size_function&#39;),
        $option_group,
        $setting_section
    );
}

// 初始化页面
public function my_settings_page(){
    ?&gt;
    &lt;div class=&#34;wrap&#34;&gt;
       &lt;h2&gt;插件菜单&lt;/h2&gt;
       &lt;form action=&#34;options.php&#34; method=&#34;post&#34;&gt;
          &lt;!-- 调用要显示的信息 --&gt;
          &lt;?php
              $option_group = &#39;my_test_group&#39;;
              //输出一些必要的字段,包括验证信息等
              settings_fields($option_group);
              //输出选项设置区域
              do_settings_sections($option_group);
              //输出按钮
              submit_button();
          ?&gt;
    
       &lt;/form&gt;
    &lt;/div&gt;
    &lt;?php
}
//字体颜色
public function my_test_color_function(){
    //获取选项  之前用register_setting注册的选项
    $my_test_option = get_option(&#39;my_test_option&#39;);
    ?&gt;
    &lt;!-- name值为 要保存的字段名称 = 选项名称(my_test_option)+[字段名称] --&gt;
    &lt;input type=&#34;text&#34; name=&#34;my_test_option[color]&#34; value=&#34;&lt;?php echo $my_test_option[&#39;color&#39;]?&gt;&#34;&gt;
    &lt;?php
}
//字体大小
public function my_test_size_function(){
    $my_test_option = get_option(&#39;my_test_option&#39;);
    $size = $my_test_option[&#39;size&#39;];
    ?&gt;
    &lt;select name=&#34;my_test_option[size]&#34; id=&#34;&#34;&gt;
        &lt;option value=&#34;12&#34; &lt;?php selected(&#39;12&#39;,$size)?&gt;&gt;12&lt;/option&gt;
        &lt;option value=&#34;14&#34; &lt;?php selected(&#39;14&#39;,$size)?&gt;&gt;14&lt;/option&gt;
    &lt;/select&gt;
    &lt;?php
}
public function my_test_setting_section_function(){
    ?&gt;&lt;p&gt;设置字体样式&lt;/p&gt;&lt;?php
}
public function my_test_head_fun(){
    $my_test_option = get_option(&#39;my_test_option&#39;);//获取选项组
    ?&gt;
    &lt;style&gt;
        body{
            color:&lt;?php echo $my_test_option[&#39;color&#39;]?&gt;;
            font-size: &lt;?php echo $my_test_option[&#39;size&#39;]?&gt;;
        }
    &lt;/style&gt;
    &lt;?php
     
}

}
new my_change_font_style();

页面正常显示