underpin / admin-page-loader
Underpin的Admin页面加载器
1.1.0
2021-11-22 12:36 UTC
Requires
- underpin/option-loader: ^1.0
- underpin/underpin: ^2.0
This package is auto-updated.
Last update: 2024-09-22 19:08:42 UTC
README
一个辅助添加WordPress网站管理页面的加载器。
安装
使用Composer
composer require underpin/admin-page-loader
手动
此插件使用内置自动加载器,因此只要它在Underpin之前被要求,它应该可以按预期工作。
require_once(__DIR__ . '/underpin-admin-pages/admin-pages.php');
设置
- 安装Underpin。请参阅Underpin文档
- 根据需要注册新的管理页面。
基本示例
一个非常基本的示例可能看起来像这样。此示例将在设置页面上显示一个文本字段,并使用Underpin的字段API处理字段保存。
// Register the option to use on the settings page. See Underpin_Options\Abstracts\Option underpin()->options()->add( 'example_admin_options', [ 'key' => 'example_option', // required 'default_value' => [ 'test_setting' => 'Hello world', ], 'name' => 'Example Admin Page', 'description' => 'Settings manged by Example Admin Page', ] ); // Register the admin page underpin()->admin_pages()->add( 'example-admin-page', [ 'page_title' => underpin()->__( 'Example Admin Page' ), 'menu_title' => underpin()->__( 'Example' ), 'capability' => 'administrator', 'menu_slug' => 'example-admin-page', 'icon' => 'dashicons-admin-site-alt', 'position' => 5, 'sections' => [ [ 'id' => 'primary-section', 'name' => underpin()->__( 'Primary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'test_setting' ), [ 'name' => 'test_setting', 'description' => underpin()->__( 'Optional. Specify the person to say hello to. Default "world".' ), 'label' => underpin()->__( 'Name' ), ] ], ], ], ], ], ] );
多个部分
管理屏幕被分成几个部分。这使得快速将页面布局更改为各种显示类型(如表格布局)成为可能。此示例将在单个页面上显示所有部分。
// Register the option to use on the settings page. See Underpin_Options\Abstracts\Option underpin()->options()->add( 'example_admin_options', [ 'key' => 'example_option', // required 'default_value' => [ 'test_setting' => 'Hello world', 'another_setting' => 'Second tab setting value', ], 'name' => 'Example Admin Page', 'description' => 'Settings manged by Example Admin Page', ] ); // Register the admin page underpin()->admin_pages()->add( 'example-admin-page', [ 'page_title' => underpin()->__( 'Example Admin Page' ), 'menu_title' => underpin()->__( 'Example' ), 'capability' => 'administrator', 'menu_slug' => 'example-admin-page', 'icon' => 'dashicons-admin-site-alt', 'position' => 5, 'sections' => [ [ 'id' => 'primary-section', 'name' => underpin()->__( 'Primary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'test_setting' ), [ 'name' => 'test_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Setting Name' ), ] ], ], ], ], [ 'id' => 'secondary-section', 'name' => underpin()->__( 'Secondary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'another_setting' ), [ 'name' => 'another_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Secondary Setting Name' ), ] ], ], ], ], ], ] );
部分作为标签页
要更改显示以使用标签页,只需将type
参数设置为tabs
。
// Register the option to use on the settings page. See Underpin_Options\Abstracts\Option underpin()->options()->add( 'example_admin_options', [ 'key' => 'example_option', // required 'default_value' => [ 'test_setting' => 'Hello world', 'another_setting' => 'Second tab setting value', ], 'name' => 'Example Admin Page', 'description' => 'Settings manged by Example Admin Page', ] ); // Register the admin page underpin()->admin_pages()->add( 'example-admin-page', [ 'page_title' => underpin()->__( 'Example Admin Page' ), 'menu_title' => underpin()->__( 'Example' ), 'capability' => 'administrator', 'menu_slug' => 'example-admin-page', 'layout' => 'tabs', 'icon' => 'dashicons-admin-site-alt', 'position' => 5, 'sections' => [ [ 'id' => 'primary-section', 'name' => underpin()->__( 'Primary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'test_setting' ), [ 'name' => 'test_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Setting Name' ), ] ], ], ], ], [ 'id' => 'secondary-section', 'name' => underpin()->__( 'Secondary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'another_setting' ), [ 'name' => 'another_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Secondary Setting Name' ), ] ], ], ], ], ], ] );
自定义模板
默认情况下,布局有意设计得与WordPress匹配。目的是提供一个快速构建管理页面的方法,这通常是一个耗时的任务。然而,有许多方法可以扩展此页面的行为。
选项1:创建自定义设置字段
所有字段渲染都在Setting_Field::place
内部发生。换句话说,如果您创建自定义设置字段,则可以创建字段的自定义模板,并自定义该字段在保存时的行为。
选项2:扩展Admin_Page以包含自定义布局
另一种选择是扩展Admin_Page
中的相关函数以包含您自己的行为。通过这样做,您将能够创建自己的模板文件,这些文件可以用来替代默认模板。
这里没有展示,但您还可以扩展几乎一切,包括如何保存选项以及保存位置。
class Custom_Page extends \Underpin_Admin_Pages\Factories\Admin_Page_Instance{ /** * Fetches the valid templates and their visibility. * * override_visibility can be either "theme", "plugin", "public" or "private". * theme - sets the template to only be override-able by a parent, or child theme. * plugin - sets the template to only be override-able by another plugin. * public - sets the template to be override-able anywhere. * private - sets the template to be non override-able. * * @since 1.0.0 * * @return array of template properties keyed by the template name */ public function get_templates() { if( 'custom-layout' === $this->layout ){ return [ 'admin' => [ // This should match your entry file name for this template. 'override_visibility' => 'private' // Or whatever. ] ]; } // Fallback to default. return parent::get_templates(); } /** * Fetches the template group name. * * @since 1.0.0 * * @return string The template group name */ protected function get_template_group() { if('custom-layout' === $this->layout){ return 'admin'; // Or whatever you want your subdirectory to be. } // Fallback to default return parent::get_template_group(); } /** * @inheritDoc */ protected function get_template_root_path() { if('custom-layout' === $this->layout){ return 'custom/root/path'; } // Fallback to default return parent::get_template_root_path(); } }
然后,您可以使用此工厂像通常一样使用,但现在您必须指定要使用的类,而不是默认类。
// Register the admin page underpin()->admin_pages()->add( 'example-admin-page', [ 'class' => 'Custom_Page', // Name of the class to use 'args' => [ // Arguments use to set up this instance. 'page_title' => underpin()->__( 'Example Admin Page' ), 'menu_title' => underpin()->__( 'Example' ), 'capability' => 'administrator', 'menu_slug' => 'example-admin-page', 'layout' => 'tabs', 'icon' => 'dashicons-admin-site-alt', 'position' => 5, 'sections' => [ [ 'id' => 'primary-section', 'name' => underpin()->__( 'Primary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'test_setting' ), [ 'name' => 'test_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Setting Name' ), ] ], ], ], ], [ 'id' => 'secondary-section', 'name' => underpin()->__( 'Secondary Section' ), 'options_key' => 'example_admin_options', 'fields' => [ 'test_setting' => [ 'class' => 'Underpin\Factories\Settings_Fields\Text', 'args' => [ underpin()->options()->pluck( 'example_admin_options', 'another_setting' ), [ 'name' => 'another_setting', 'description' => underpin()->__( 'This is a description of this setting' ), 'label' => underpin()->__( 'Secondary Setting Name' ), ] ], ], ], ], ], ], ] );