WordPress插件开发教程二:创建插件菜单和插件设置页面

上一篇的内容中我们说了如何创建一个插件以及删除和停用,这篇我们来说一下如何创建插件菜单和增加插件设置页面

先说一下如何创建插件菜单,这里说的是在后台的设置的菜单中增加一个属于我们插件的页面

添加到设置->常规中

如果我们的插件设置很简单,只需一个或两个参数的时候,可以考虑添加到设置->常规的页面中,这样就无须再新增页面了

/**
 * WordPress 添加额外选项字段到常规设置页面
 */
$new_general_setting = new new_general_setting();
class new_general_setting {
    function new_general_setting( ) {
        add_filter( 'admin_init' , array( &$this , 'register_fields' ) );
    }
    function register_fields() {
        register_setting( 'general', 'PushBear_SendKey', 'esc_attr' );
        add_settings_field('PushBear_SendKey', '<label>'.__('PushBear SendKey' ).'</label>' , array(&$this, 'fields_html') , 'general' );
    }
    function fields_html() {
        $value = get_option('PushBear_SendKey');
        echo '<input type="text" id="PushBear_SendKey" name="PushBear_SendKey" value="' . $value . '" />';
    }
}

这样我们就可以在常规页面中看到我们新增的PushBear SendKey,获取配置可以使用

get_option('PushBear_SendKey');

这还不算完,如果我们的设置参数很多呢?这样明显有点麻烦,所以我们直接新增一个我们插件专属设置页面

新增插件设置页面

这里我们使用add_submenu_page()函数给options-general.php添加一个子菜单,也就是我们自己插件的设置页面

看一下这个add_submenu_page()函数原型

add_submenu_page($parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function);

各个参数的含义如下:

$parent_slug 父级菜单项的别名
$page_title 页面的 title 信息
$menu_title 菜单标题
$capability 权限
$menu_slug 别名(url 中 page 的参数)
$function 执行的函数

知道了参数是什么意思,我们就可以来增加插件页面了

add_action('admin_menu', 'pwtw_submit_menu');
function pwtw_submit_menu()
{
    add_submenu_page('options-general.php', '微信订阅设置', 'Push To WeChat', 'manage_options', 'Push_To_WeChat', 'pwtw_submit_options', '');
}

增加以后访问/wp-admin/options-general.php?page=Push_To_WeChat,会发现是个空白页面

接着看设置菜单中会多出一个Push To WeChat,这个也可以进入我们的插件页面

就这样,下一篇介绍如何完善我们的插件页面

4 条评论

发表评论

*

  • 可以放到option里,但我更喜欢用add_menu_page自己单独扯个页面出来。后面既然用中文了,那么__(‘PushBear SendKey’ )这里也应该改了吧。
    另外真心求教,add_filter那里为什么要传引用?

    • @大致 哪里用中文了?前面的是在常规里添加,后面是自己添加页面,不一样吧;引用这里兼容了低版本,5.6+好像已经不用这么写了。

      • @沈唁 add_submenu_page(‘options-general.php’, ‘微信订阅设置’, ‘Push To WeChat’, ‘manage_options’, ‘Push_To_WeChat’, ‘pwtw_submit_options’, ”);
        这不就是直接上中文了吗。都是在后台自己看,都是标题或者名字,没觉得有什么不一样。