Theme options page not appearing on WordPress admin panel

I am using the code below to create custom theme options.

theme-options.php

Read More
<?php 
// create custom plugin settings menu
add_action('admin_menu', 'director_create_menu');

function director_create_menu() {

    //create new submenu
    add_submenu_page( 'themes.php', 'Director Theme Options', 'Director Options', 'administrator', __FILE__, 'director_settings_page');

    //call register settings function
    add_action( 'admin_init', 'director_register_settings' );
}

function director_register_settings() {
    //register our settings
    register_setting( 'director-settings-group', 'director_facebook' );
    register_setting( 'director-settings-group', 'director_twitter' );
    register_setting( 'director-settings-group', 'director_rss' );
    register_setting( 'director-settings-group', 'director_logo' );
    register_setting( 'director-settings-group', 'director_analytics' );
}

function director_settings_page() {

?>

<div class="wrap">
<h2>Director Theme Settings</h2>

<form id="landingOptions" method="post" action="options.php">
    <?php settings_fields( 'director-settings-group' ); ?>
    <table class="form-table">
        <tr valign="top">
        <th scope="row">Logo:</th>
        <td>
            <input type="text" name="director_logo" value="<?php print get_option('director_logo'); ?>" /><br/>
            *Upload using the Media Uploader and paste the URL here.
        </td>
        </tr>
        <tr valign="top">
        <th scope="row">Facebook Link:</th>
        <td>
            <input type="text" name="director_facebook" value="<?php print get_option('director_facebook'); ?>" />
        </td>
        </tr>
          <tr valign="top">
        <th scope="row">Twitter Link:</th>
        <td>
            <input type="text" name="director_twitter" value="<?php print get_option('director_twitter'); ?>" />
        </td>
        </tr>
        <tr>
        <th scope="row">Display RSS Icon:</th>
        <td>
            <input type="checkbox" name="director_rss" <?php if(get_option('director_rss') == true){ print "checked"; } ?>  />
        </td>
        </tr>
        <tr>
        <th scope="row">Google Analytics Code:</th>
        <td>
            <textarea name="director_analytics"><?php print get_option('director_analytics'); ?></textarea>
        </td>
        </tr>      
    </table>
    <p class="submit">
    <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
    </p>

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

functions.php

<?php
.
.
require_once('theme-options.php');
.
.
?>

I got the menu “Director Options” as you can see in the image below.

enter image description here

But when I click on it I am not landing on to the settings page as defined under the director_settings_page() function.

Here is the expected result:

enter image description here

Related posts

2 comments

  1. The way I do it, I use add_theme_page() instead of add_submenu_page(). Give this a try to see if it helps at all. Maybe it’ll lead you in the right direction.

    <?php
    
    add_action('admin_menu', 'director_create_menu');
    function director_create_menu(){
        add_theme_page('Director Theme Options', 'Director Theme Options', 'manage_options', 'director_settings', 'director_settings_page');
    }
    
    
    add_action( 'admin_init', 'director_register_settings' );
    function director_register_settings(){
        //register our settings
        register_setting( 'director-settings-group', 'director_facebook' );
        register_setting( 'director-settings-group', 'director_twitter' );
        register_setting( 'director-settings-group', 'director_rss' );
        register_setting( 'director-settings-group', 'director_logo' );
        register_setting( 'director-settings-group', 'director_analytics' );
    }
    
    
    //Output the settings page
    function director_settings_page(){
    ?>
        <!-- page stuff here -->
    
  2. Replace this in your theme-options.php.

        <?php
    add_action('admin_menu', 'director_create_menu');
    function director_create_menu(){
        add_theme_page('Director Theme Options', 'Director Theme Options', 'manage_options', 'director_settings', 'director_settings_page');
    }
    add_action( 'admin_init', 'director_register_settings' );
    function director_register_settings(){
        //register our settings
        register_setting( 'director-settings-group', 'director_facebook' );
        register_setting( 'director-settings-group', 'director_twitter' );
        register_setting( 'director-settings-group', 'director_rss' );
        register_setting( 'director-settings-group', 'director_logo' );
        register_setting( 'director-settings-group', 'director_analytics' );
    }
    //Output the settings page
    function director_settings_page(){
    ?>
    <div class="wrap">
    <h2>Director Theme Settings</h2>
    
    <form id="landingOptions" method="post" action="options.php">
        <?php settings_fields( 'director-settings-group' ); ?>
        <table class="form-table">
            <tr valign="top">
            <th scope="row">Logo:</th>
            <td>
                <input type="text" name="director_logo" value="<?php print get_option('director_logo'); ?>" /><br/>
                *Upload using the Media Uploader and paste the URL here.
            </td>
            </tr>
            <tr valign="top">
            <th scope="row">Facebook Link:</th>
            <td>
                <input type="text" name="director_facebook" value="<?php print get_option('director_facebook'); ?>" />
            </td>
            </tr>
              <tr valign="top">
            <th scope="row">Twitter Link:</th>
            <td>
                <input type="text" name="director_twitter" value="<?php print get_option('director_twitter'); ?>" />
            </td>
            </tr>
            <tr>
            <th scope="row">Display RSS Icon:</th>
            <td>
                <input type="checkbox" name="director_rss" <?php if(get_option('director_rss') == true){ print "checked"; } ?>  />
            </td>
            </tr>
            <tr>
            <th scope="row">Google Analytics Code:</th>
            <td>
                <textarea name="director_analytics"><?php print get_option('director_analytics'); ?></textarea>
            </td>
            </tr>      
        </table>
        <p class="submit">
        <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
        </p>
    
    </form>
    </div>
    <?php } ?>
    

    Works Fine.

    Here is the screenshot.

    enter image description here

    Enjoy Cheers 🙂

Comments are closed.