Support » Developing with WordPress » Learning to write plugins, first problem

  • Resolved namenobodyuses

    (@namenobodyuses)


    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)
  • 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

    (@namenobodyuses)

    Thank you!

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Learning to write plugins, first problem’ is closed to new replies.