Theme Options

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