Creating a custom theme options page is very simple if you follow these steps. In this lesson we will create a very basic options page.
Step 1: Init the options page.
In your functions.php file add this line to the top:
require_once ( get_template_directory() . '/theme-options.php' );
Step 2: Create theme-options.php
// The following line calls the function theme_options_init where we will register the options. It will also take care of storing the values
add_action( ‘admin_init’, ‘theme_options_init’ );
// The following line connects the admin_menu event to load up the HTML for the form
add_action( ‘admin_menu’, ‘theme_options_add_page’ );
// adds the theme options page to the Theme admin menu
function theme_options_add_page() {
add_theme_page( __( ‘Theme Options’ ), __( ‘Theme Options’ ), ‘edit_theme_options’, ‘theme_options’, ‘theme_options_html’ );
}
// This is the init which is used by POST
function theme_options_init(){
// this little bit of magic works similar to scaffolding in other popular frameworks. Inputs that have names ‘my_options[key]‘ will be automatically stored by wordpress. You can also use a filter function in the syntax. See wordpress codex for more info
register_setting( ‘my_options’, ‘my_options’ );
}
function theme_options_html() {
if ( ! isset( $_REQUEST['updated'] ) )
$_REQUEST['updated'] = false;
?>
<div class=”wrap”>
<?php screen_icon(); echo “<h2>” . get_current_theme() . __( ‘ Theme Options’ ) . “</h2>”; ?>
<?php if ( false !== $_REQUEST['updated'] ) : ?>
<div class=”updated fade”><p><strong><?php _e( ‘Options saved’ ); ?></strong></p></div>
<?php endif; ?>
<form method=”post” action=”options.php”>
<?php settings_fields( ‘my_options’ ); ?>
<?php $options = get_option( ‘my_options’ ); ?>
<input type=”text” name=”my_options[setting1]” id=”my_options[setting1]” value=”<?php echo $options['setting1'];?>” />
<input type=”submit” name=”save” value=”Save” />
</form>
</div>
<?php
}
?>
That’s it! Basic text inputs are very easy to do. Contact me if you need to do more complex upload such as images.