Title: Learning to write plugins, first problem
Last modified: October 8, 2019

---

# Learning to write plugins, first problem

 *  Resolved [namenobodyuses](https://wordpress.org/support/users/namenobodyuses/)
 * (@namenobodyuses)
 * [6 years, 8 months ago](https://wordpress.org/support/topic/learning-to-write-plugins-first-problem/)
 * I’m trying to give plugin-writing a try.
    I’m following WP documentation and 
   a few videotutorials on YouTube.
 * I’ve learnet to use hooks. I’ve learned to create a settings page.
 * Now I’d want to be able to use one of the setting in my plugin.
 * This is the code for the setting page:
 *     ```
       class MySettingsPage
       {
           /**
            * Holds the values to be used in the fields callbacks
            */
           private $options;
   
           /**
            * Start up
            */
           public function __construct()
           {
               add_action( 'admin_menu', array( $this, 'add_plugin_page' ) );
               add_action( 'admin_init', array( $this, 'page_init' ) );
           }
   
           /**
            * Add options page
            */
           public function add_plugin_page()
           {
               // This page will be under "Settings"
               add_options_page(
                   'Settings Admin', 
                   'My Settings', 
                   'manage_options', 
                   'my-setting-admin', 
                   array( $this, 'create_admin_page' )
               );
           }
   
           /**
            * Options page callback
            */
           public function create_admin_page()
           {
               // Set class property
               $this->options = get_option( 'my_option_name' );
               ?>
               <div class="wrap">
                   <h1>My Settings</h1>
                   <form method="post" action="options.php">
                   <?php
                       // This prints out all hidden setting fields
                       settings_fields( 'my_option_group' );
                       do_settings_sections( 'my-setting-admin' );
                       submit_button();
                   ?>
                   </form>
               </div>
               <?php
           }
   
           /**
            * Register and add settings
            */
           public function page_init()
           {        
               register_setting(
                   'my_option_group', // Option group
                   'my_option_name', // Option name
                   array( $this, 'sanitize' ) // Sanitize
               );
   
               add_settings_section(
                   'setting_section_id', // ID
                   'My Custom Settings', // Title
                   array( $this, 'print_section_info' ), // Callback
                   'my-setting-admin' // Page
               );  
   
               /*
       		add_settings_field(
                   'id_number', // ID
                   'ID Number', // Title 
                   array( $this, 'id_number_callback' ), // Callback
                   'my-setting-admin', // Page
                   'setting_section_id' // Section           
               );   
       		*/
   
               add_settings_field(
                   'title', 
                   'Title', 
                   array( $this, 'title_callback' ), 
                   'my-setting-admin', 
                   'setting_section_id'
               );      
           }
   
           /**
            * Sanitize each setting field as needed
            *
            * @param array $input Contains all settings fields as array keys
            */
           public function sanitize( $input )
           {
               $new_input = array();
               if( isset( $input['id_number'] ) )
                   $new_input['id_number'] = absint( $input['id_number'] );
   
               if( isset( $input['title'] ) )
                   $new_input['title'] = sanitize_text_field( $input['title'] );
   
               return $new_input;
           }
   
           /** 
            * Print the Section text
            */
           public function print_section_info()
           {
               print 'Enter your settings below:';
           }
   
           /** 
            * Get the settings option array and print one of its values
            */
           public function id_number_callback()
           {
       		printf(
                   '<input type="text" id="id_number" name="my_option_name[id_number]" value="%s" />',
                   isset( $this->options['id_number'] ) ? esc_attr( $this->options['id_number']) : ''
               );
           }
   
           /** 
            * Get the settings option array and print one of its values
            */
           public function title_callback()
           {
               print_r($this);
       		printf(
                   '<input type="text" id="title" name="my_option_name[title]" value="%s" />',
                   isset( $this->options['title'] ) ? esc_attr( $this->options['title']) : ''
               );
           }
   
       	public function title_print()
           {
               printf(
                   '<input type="text" id="title" name="my_option_name[title]" value="%s" />',
                   isset( $this->options['title'] ) ? esc_attr( $this->options['title']) : ''
               );
           }
   
   
       }
   
       if( is_admin() )
           $my_settings_page = new MySettingsPage();
       ```
   
 * This is the code where I try to publish what’s entered in setting form into the
   footer of the website.
 *     ```
       add_action( 'wp_footer', 'my_footer' );
       function my_footer ( $content ) {	
          $my_obj = new MySettingsPage();
       echo $my_obj->title_callback();
       ```
   
 * But I get a form field instead.
 * Also, a side request: for such a simple options, I think a new item in main admin
   menu is too much. How could I add the option below the plugin entry in the plugins
   page?

Viewing 2 replies - 1 through 2 (of 2 total)

 *  [Joy](https://wordpress.org/support/users/joyously/)
 * (@joyously)
 * [6 years, 8 months ago](https://wordpress.org/support/topic/learning-to-write-plugins-first-problem/#post-12009996)
 * Your functions are for your Settings page, not for using the options.
    You already
   have the code you need to use the option: `$this->options = get_option( 'my_option_name');`
   That retrieved the values from the database. Now you just use the proper index
   into the array for the option you want, such as `['title']` or `['id_number']`.
 * You need a main admin menu entry, since if you had a link below your plugin entry,
   it has to navigate to somewhere. Having the plugin’s options right there on the
   plugin page is too messy, and not what that page is for. The functions that you
   wrote using the Settings API are for your own page, not the plugin page.
 *  Thread Starter [namenobodyuses](https://wordpress.org/support/users/namenobodyuses/)
 * (@namenobodyuses)
 * [6 years, 8 months ago](https://wordpress.org/support/topic/learning-to-write-plugins-first-problem/#post-12015995)
 * Thank you!

Viewing 2 replies - 1 through 2 (of 2 total)

The topic ‘Learning to write plugins, first problem’ is closed to new replies.

## Tags

 * [development](https://wordpress.org/support/topic-tag/development/)
 * [settings](https://wordpress.org/support/topic-tag/settings/)

 * In: [Developing with WordPress](https://wordpress.org/support/forum/wp-advanced/)
 * 2 replies
 * 2 participants
 * Last reply from: [namenobodyuses](https://wordpress.org/support/users/namenobodyuses/)
 * Last activity: [6 years, 8 months ago](https://wordpress.org/support/topic/learning-to-write-plugins-first-problem/#post-12015995)
 * Status: resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
