Theme option containers用于在后端添加带有选项的页面。 字段数据存储为选项。 请注意,默认情况下,只有具有 manage_options
功能的用户才能访问此容器。 要覆盖此行为,请参阅 Hooks 部分中的 carbon_fields_theme_options_container_admin_only_access
过滤器。
默认情况下,主题选项容器会在名为“Theme Options”的管理区域菜单中自动创建主页。 在大多数情况下,这些默认设置就足够了,但如果您需要更改菜单中页面的标题或位置,请阅读下面的“Multiple option pages”部分。
use Carbon_Fields\Container;
use Carbon_Fields\Field;
Container::make( 'theme_options', __( 'Theme Options' ) )
->add_fields( array(
Field::make( 'text', 'crb_facebook_url', __( 'Facebook URL' ) ),
Field::make( 'textarea', 'crb_footer_text', __( 'Footer Text' ) )
) );
Multiple option pages
有时需要创建多个选项页面。 在其他时候,您需要在管理菜单的不同部分中放置不同的页面。 例如,您可能有大量的背景设置列表,您希望将其放置在外观下的单独主题选项页面上。
要更改主题选项页面的位置,请使用 set_page_parent($parent)
,其中 $parent
是:
对顶级主题选项容器的引用。
顶级主题选项容器的菜单块。
任何顶级管理页面的菜单项。 这对应于 add_submenu_page() 的 $parent_slug
参数。 您可以在此处查看所有预定义的页面父级。
下面是创建三个主题选项容器的示例代码:
use Carbon_Fields\Container;
use Carbon_Fields\Field;
// Default options page
$basic_options_container = Container::make( 'theme_options', __( 'Basic Options' ) )
->add_fields( array(
Field::make( 'header_scripts', 'crb_header_script', __( 'Header Script' ) ),
Field::make( 'footer_scripts', 'crb_footer_script', __( 'Footer Script' ) ),
) );
// Add second options page under 'Basic Options'
Container::make( 'theme_options', __( 'Social Links' ) )
->set_page_parent( $basic_options_container ) // reference to a top level container
->add_fields( array(
Field::make( 'text', 'crb_facebook_link', __( 'Facebook Link' ) ),
Field::make( 'text', 'crb_twitter_link', __( 'Twitter Link' ) ),
) );
// Add third options page under "Appearance"
Container::make( 'theme_options', __( 'Customize Background' ) )
->set_page_parent( 'themes.php' ) // identificator of the "Appearance" admin section
->add_fields( array(
Field::make( 'color', 'crb_background_color', __( 'Background Color' ) ),
Field::make( 'image', 'crb_background_image', __( 'Background Image' ) ),
) );
有关管理管理页面的详细信息,请参阅 Administration_Menus。
本地化页面标题
默认情况下,选项页面的 URL 是从传递给 Container::make
方法的标题生成的。 在上面的示例中,URL 将是 admin.php?page=theme-options
。 如果您使用 gettext
函数来本地化标题,例如:
Container::make( 'theme_options', __( 'Theme Options', 'my-textdomain' ) )
那么您页面的 URL 将因不同的语言而有所不同。 这将导致允许管理语言切换的多语言插件(例如 WPGlobus 或 WPML)出现问题。
要解决此问题,您需要调用 set_page_file
方法,如下所示:
use Carbon_Fields\Container;
use Carbon_Fields\Field;
Container::make( 'theme_options', __( 'Theme Options', 'my-textdomain' ) )
->set_page_file( 'theme-options' )
->add_fields( array(
Field::make( 'text', 'crb_facebook_url' ),
Field::make( 'textarea', 'crb_footer_text' ),
) );
菜单图标
要更改主题选项页面的图标,您可以使用 set_icon( $icon )
,其中 $icon
可以是 add_menu_page()函数的 $icon_url
参数支持的值之一。
下面是一个设置主题选项页面图标的示例:
use Carbon_Fields\Container;
use Carbon_Fields\Field;
Container::make( 'theme_options', 'Basic Options' )
->set_icon( 'dashicons-carrot' )
->add_fields( array(
Field::make( 'text', 'crb_test_field' ),
) );
菜单标题
要更改容器的菜单按钮标题,您可以使用 set_page_menu_title( $title )
,其中 $title
是您想要的标题。 有关详细信息,请参阅 add_menu_page()函数。
Container::make( 'theme_options', 'Basic Options' )
->set_page_menu_position( 80 )
->add_fields( array(
// ...
) );
访问字段值
要从主题选项容器中检索字段值,您需要使用函数 carbon_get_theme_option( $name )
,其中:
参数 | 描述 |
---|---|
$name |
要检索的字段的字段名称模式。 |
<p>Copyright <?php echo carbon_get_theme_option( 'crb_copyright' ); ?></p>
<p>
Office locations:
<?php
$address_lines = carbon_get_theme_option( 'crb_addresses' );
foreach ( $address_lines as $line ) {
echo $line . '<br/>';
}
?>
<p>
保存后调用钩子,允许你在保存后钩子附加功能。carbon_fields_theme_options_container_saved
。