RSS

Custom theme options page in wordpress

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.