返回上一级

WordPress后台顶部添加显示选项和帮助选项卡

如何在后台顶部右上角添加 显示选项卡 和 帮助选项卡 。

通过wordpress提供的接口可以轻易实现该功能。

add_action('admin_menu', '') 创建菜单中,添加以下内容:

 1add_action('admin_menu', function () {
 2    $krjojo_tool = add_submenu_page(
 3        'krjojo_slug',
 4        '插件完整标题',
 5        '插件左标题',
 6        'manage_options',
 7        'krjojo_tool_slug',
 8        'krjojo_tool_html'
 9    );
10
11    add_action('load-' . $krjojo_tool, function () {
12
13        // 创建分页选项
14        add_screen_option('per_page', [
15            // 'label'   => '每页显示',
16            'default' => 20,
17            'option' => 'krjojo_tool_per_page'
18        ]);
19
20        // 创建帮助选项卡
21        $screen = get_current_screen();
22        $screen->add_help_tab([
23            'id'      => 'krjojo_tool_email_log_help',
24            'title'   => '概述',
25            'content' => '<p>这里是我的插件的帮助内容。</p>',
26        ]);
27        $screen->add_help_tab([
28            'id'      => 'krjojo_tool_email_log_help2',
29            'title'   => '可执行操作',
30            'content' => '<p>这里是我的插件的帮助内容2。</p>',
31        ]);
32    });
33});

保存刷新便能在页面顶部看到内容了。

但如果你点进显示选项卡修改分页数,会发现数值无法保存,怎么点击都是默认数20,其实这需要另外手动实现方法保存。

wordpress提供了保存选项的实现方法。

1add_filter('set-screen-option', function ($screen_option, $option, $value) {
2    return $option === 'krjojo_tool_per_page' ? $value : $screen_option;
3}, 10, 3);

但是该方法却不能放在 add_action('admin_menu', '') 中。

需要更早调用才能运作,如 init 中。

1add_action('init', function () {
2    add_filter('set-screen-option', function ($screen_option, $option, $value) {
3        return $option === 'krjojo_tool_per_page' ? $value : $screen_option;
4    }, 10, 3);
5});

总体感觉非常诡异。

这时候保存数据,便能在数据库中 wp_usermeta 中看到保存的值了。

获取分页数方法,在表格中:

1class Krjojo_Tool_Table extends WP_List_Table
2{
3    ...
4    function prepare_items()
5    {
6        $per_page = $this->get_items_per_page('krjojo_tool_per_page');
7    }
8    ...
9}

如果要表格外获取数据,那就要判断当前是什么用户,再获取该用户的 krjojo_tool_per_page 的值。

具体代码就不演示了。

全部合在一起便是:

 1add_action('init', function () {
 2    add_filter('set-screen-option', function ($screen_option, $option, $value) {
 3        return $option === 'krjojo_tool_per_page' ? $value : $screen_option;
 4    }, 10, 3);
 5});
 6
 7add_action('admin_menu', function () {
 8    $krjojo_tool = add_submenu_page(
 9        'krjojo_slug',
10        '插件完整标题',
11        '插件左标题',
12        'manage_options',
13        'krjojo_tool_slug',
14        'krjojo_tool_html'
15    );
16
17    add_action('load-' . $krjojo_tool, function () {
18
19        // 创建分页选项
20        add_screen_option('per_page', [
21            // 'label'   => '每页显示',
22            'default' => 20,
23            'option' => 'krjojo_tool_per_page'
24        ]);
25
26        // 创建帮助选项卡
27        $screen = get_current_screen();
28        $screen->add_help_tab([
29            'id'      => 'krjojo_tool_email_log_help',
30            'title'   => '概述',
31            'content' => '<p>这里是我的插件的帮助内容。</p>',
32        ]);
33        $screen->add_help_tab([
34            'id'      => 'krjojo_tool_email_log_help2',
35            'title'   => '可执行操作',
36            'content' => '<p>这里是我的插件的帮助内容2。</p>',
37        ]);
38    });
39});
40
41class Krjojo_Tool_Table extends WP_List_Table
42{
43    ...
44    function prepare_items()
45    {
46        $per_page = $this->get_items_per_page('krjojo_tool_per_page');
47    }
48    ...
49}