Creating a theme option page?

An example code for an options-page for a theme. Copy this code in the functions.php of the theme.

if ( !function_exists('localizing_theme_setup') ) {

    function localizing_theme_setup() {

        localizing_constants();

        // Make theme available for translation
        // Translations can be filed in the /languages/ directory
        load_theme_textdomain( FB_LT_TEXTDOMAIN, TEMPLATEPATH . '/languages' );

        // instance class
        $localizing_theme_options = new localizing_theme_options();
    }

}
add_action( 'after_setup_theme', 'localizing_theme_setup' );

function localizing_constants() {

    define( 'FB_LT_TEXTDOMAIN', 'localizing' );
}

if ( !class_exists( 'localizing_theme_options' ) ) {
    class localizing_theme_options {

        // constructor
        function localizing_theme_options() {

            add_action( 'admin_init', 
                array(&$this, 'localizing_theme_options_init') 
            ); 
            add_action( 'admin_menu', 
                array(&$this, 'localizing_theme_options_add_page') 
            );
        } 

        // Plugin options initialisieren 
        function localizing_theme_options_init() { 
            register_setting( 
                'localizing_theme_options', 
                'localizing_theme', 
                array(&$this, 'localizing_theme_options_validate') 
            ); 
        } 

        // Menu page Seite hinzufuegen 
        function localizing_theme_options_add_page() { 
            add_theme_page( 
                __( 'Set your Localizing Settings', FB_LT_TEXTDOMAIN ), 
                __( 'Localizing Settings', FB_LT_TEXTDOMAIN ), 
                'switch_themes', 
                'localizing_settings', 
                array( &$this, 'localizing_theme_options_do_page' ) 
            ); 
        } 

        // HTML, Simple Options Page 
        function localizing_theme_options_do_page() { 
            ?> 
            <div class="wrap"> 
                <h2><?php _e( 'Localizing Settings', FB_LT_TEXTDOMAIN ); ?></h2> 
                <form method="post" action="options.php"> 

                    <?php 
                    settings_fields('localizing_theme_options');
                    $options = get_option('localizing_theme');
                    $available_languages_files = get_available_languages();
                    if ( !empty( $available_languages_files ) ) {
                        // Translate the list into something that's easier to search
                        foreach ( $available_languages_files as $available_language ) {
                            $parts = explode( '_', $available_language );

                            if ( empty( $parts[0] ) )
                                continue;

                            $available_languages[ strtolower( $parts[0] ) ] = $available_language;

                            $santized = strtolower( $available_language );
                            $santized = str_replace( '_', '-', $santized );
                            $available_languages[$santized] = $available_language;
                            $all_available_languages[] = $available_language;
                        }
                    }
                    ?>
                    <table class="form-table">
                        <tr>
                            <th scope="row"> 
                                <?php _e( 'Available languages', FB_LT_TEXTDOMAIN ); ?> 
                            </th> 
                            <td>
                                <input type="text" disabled="disabled" name="" 
                                value="<?php echo implode( ', ', $all_available_languages ); ?>" />
                                <br />
                                <p><?php _e( 'This languages was found in the languages folder of this install.', FB_LT_TEXTDOMAIN ); ?></p>
                            </td>
                        </tr>

                        <tr valign="top"> 
                            <th scope="row"> 
                                <?php _e( 'A example checkbox', FB_LT_TEXTDOMAIN ); ?> 
                            </th> 
                            <td>
                                <input name="example_name[myoption1]" type="checkbox"  
                                value="1" <?php checked('1', 
                                $options['myoption1']); ?> />
                            </td> 
                        </tr> 
                        <tr valign="top"> 
                            <th scope="row">A example text</th> 
                            <td>
                                <input type="text" name="example_name[mytext]" 
                                value="<?php echo $options['mytext']; ?>" />
                            </td> 
                        </tr> 
                    </table> 

                    <p class="submit"> 
                        <input type="submit" class="button-primary" value="<?php _e( 'Save Changes', FB_LT_TEXTDOMAIN ); ?>" /> 
                    </p> 

                </form> 
            </div> 
            <?php    
        } 

        // Sanitize und validiere input 
        // (Akzeptiert ein array, return ein sanitized array) 
        function localizing_theme_options_validate($input) { 
            // erster Wert muss 0 oder 1 sein 
            $input['option1'] = ( $input['option1'] == 1 ? 1 : 0 ); 

            // Wert mit text 
            $input['sometext'] =  wp_filter_nohtml_kses($input['sometext']); 

            return $input; 
        } 

    } // end class
} // end if class exists

this is my options from this code:

alt text

I hope you understand the code, is also an dummy, works, but is not so fine in the php-codex for classes.

Leave a Comment