我采用了以下方法:
我已经有了一个使用设置API的主题选项页面,因为我设置的这个CPT是主题的一部分,所以只有将这个选项添加到主题选项中才有意义。以下是任何人想要使用的代码:
<?php
// Add settings to menu
add_action( \'admin_menu\', \'sc_hi_rezz_theme_options_add_page\' );
function sc_hi_rezz_theme_options_add_page() {
add_theme_page(
__( \'Theme Options\', \'hi-rezz\' ),
__( \'Theme Options\', \'hi-rezz\' ),
hi_rezz_get_options_page_cap(),
\'theme_options\',
\'sc_hi_rezz_theme_options_do_page\'
);
}
// see https://make.wordpress.org/themes/2011/07/01/wordpress-3-2-fixing-the-edit_theme_optionsmanage_options-bug/
function hi_rezz_get_options_page_cap() {
return \'edit_theme_options\';
}
add_filter( \'option_page_capability_hi-rezz-options\', \'hi_rezz_get_options_page_cap\' );
// Fix Cap to allow editors to edit theme options
function sc_hi_rezz_get_options_page_cap() {
return \'edit_theme_options\';
}
add_filter( \'option_page_capability_hi-rezz-options\', \'sc_hi_rezz_get_options_page_cap\' );
// Options Page Layout
function sc_hi_rezz_theme_options_do_page() {
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e( \'Theme Options\', \'hi-rezz\' ) ?></h2>
<form action="options.php" method="post">
<?php
settings_fields( "hi_rezz_theme_options" );
do_settings_sections( "theme_options" );
?>
<?php submit_button( __( "Save changes", "hi-rezz" ), "primary", "submit", true ); ?>
</form>
</div>
<?php
}
// Register Settings
add_action( \'admin_init\', \'sc_hi_rezz_theme_settings_register\' );
function sc_hi_rezz_theme_settings_register() {
register_setting("hi_rezz_theme_options", "hi_rezz_theme_options", "sc_hi_rezz_theme_settings_validate"); // Register Main Settings
add_settings_section("sc_hi-rezz_text", __("Text / Copy", "hi-rezz"), "hi_rezz_theme_settings_dummy", "theme_options"); // Make settings text section
add_settings_section("sc_hi-rezz_cpt_settings", __("Custom Post Type Settings", "hi-rezz"), "hi_rezz_theme_settings_dummy", "theme_options"); // Make settings text section
add_settings_field("hi_rezz_theme_settings_footer_copy", __("Footer copy", "hi-rezz"), "hi_rezz_theme_settings_footer_copy_field", "theme_options", "sc_hi-rezz_text");
add_settings_field("hi_rezz_theme_settings_cpt_cs_page", __("Page for case studies", "hi-rezz"), "hi_rezz_theme_settings_cpt_cs_field", "theme_options", "sc_hi-rezz_cpt_settings");
}
function hi_rezz_theme_settings_dummy() { }
// Validate Settings
function sc_hi_rezz_theme_settings_validate($input) {
$valid = get_option("hi_rezz_theme_options");
$valid[\'sc_footer_copy\'] = wp_filter_post_kses( $input[\'sc_footer_copy\'] );
$valid[\'sc_cpt_cas_study_page\'] = (int) $input[\'sc_cpt_cas_study_page\'];
return $valid;
}
//Settings Fields
function hi_rezz_theme_settings_footer_copy_field() {
$options = get_option("hi_rezz_theme_options");
?><textarea rows="4" cols="50" name="hi_rezz_theme_options[sc_footer_copy]" id="hi_rezz_theme_settings_footer_copy"><?php echo esc_textarea($options[\'sc_footer_copy\']); ?></textarea><?php
}
function hi_rezz_theme_settings_cpt_cs_field() {
$options = get_option("hi_rezz_theme_options");
wp_dropdown_pages(
array(
\'name\' => \'hi_rezz_theme_options[sc_cpt_cas_study_page]\',
\'echo\' => 1,
\'show_option_none\' => __( \'— Select —\' ),
\'option_none_value\' => \'0\',
\'selected\' => $options[\'sc_cpt_cas_study_page\']
)
);
}
?>
以上给了我:
