• James

    (@jmdesignsolutions)


    Hi All,

    I’m very new to coding WordPress plugins/widgets (this is my first time!). I’ve built a very basic WordPress plugin which consists of 2 text inputs and a select field. The text inputs work fine however the select box doesn’t appear to be saving when I hit the “Save” button.

    Here is my plugin code:

    <?php
    /* Plugin Name: Sidebar Box
    Plugin URI: https://www.website.com
    Description: Displays contact box in sidebar
    Version: 1.0
    Author: JM
    Author URI: N/A
    */
    
    // use widgets_init action hook to execute custom function
    add_action( 'widgets_init', 'jm_box_widget' );
    
     //register our widget
    function jm_box_widget() {
        register_widget( 'jm_box_widget_my_info' );
    }
    
    //boj_widget_my_info class
    class jm_box_widget_my_info extends WP_Widget {
    
        //process the new widget
        function jm_box_widget_my_info() {
            $widget_ops = array(
                'classname' => 'jm_box_widget_class',
                'description' => 'Sidebar Box Widget.'
                );
            $this->WP_Widget( 'jm_box_widget_my_info', 'Box Widget', $widget_ops );
        }
    
         //build the widget settings form
        function form($instance) {
            $defaults = array( 'title' => 'Box Page Widget', 'description' => '', 'boxtype' => '' );
            $instance = wp_parse_args( (array) $instance, $defaults );
            $title = $instance['title'];
            $description = $instance['description'];
            $boxtype = $instance['boxtype'];
    
            ?>
                <p>Title: <input class="widefat" name="<?php echo $this->get_field_name( 'title' ); ?>"  type="text" value="<?php echo esc_attr( $title ); ?>" /></p>
                <p>Description: <textarea class="widefat" name="<?php echo $this->get_field_name( 'description' ); ?>" / ><?php echo esc_attr( $description ); ?></textarea></p>
        <p>Sex:
                <select id="<?php echo $this->get_field_id( 'boxtype' ); ?>" name="<?php echo $this->get_field_name( 'boxtype' ); ?>" class="widefat" style="width:100%;">
                <option <?php if ( 'box1' == $instance['format'] ) echo 'selected="selected"'; ?> value="box1">box1</option>
        <option <?php if ( 'box2' == $instance['format'] ) echo 'selected="selected"'; ?> value="box2">box2</option>
                </select>
            </p>
            <?php
        }
    
        //save the widget settings
        function update($new_instance, $old_instance) {
            $instance = $old_instance;
            $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['description'] = strip_tags( $new_instance['description'] );
            $instance['boxtype'] = ( $new_instance['boxtype'] );
            return $instance;
        }
    
        //display the widget
        function widget($args, $instance) {
            extract($args);
    
            echo $before_widget;
            $title = apply_filters( 'widget_title', $instance['title'] );
            $description = empty( $instance['description'] ) ? '&nbsp;' : $instance['description'];
            $boxtype = empty( $instance['boxtype'] ) ? '&nbsp;' : $instance['boxtype']; 
    
            echo '<div class="sidebar-box" id="' . $boxtype . '" onmouseover="this.style.cursor=\'pointer\'" onmouseup="window.location=\'' . $boxtype . '\'">
                    <h3>' . $title . '</h3>
                    <p>' . $description . '</p>
                    </div>';
            echo $after_widget;
        }
    }
    
    ?>

    I can’t for the life of me workout why it’s not saving.

    Any help would be greatly appreciated.

    Thanks,

    James

Viewing 2 replies - 1 through 2 (of 2 total)
  • I just stumbled across this because I was having the same problem.
    In your options, change $instance[‘format’] to $instance[‘boxtype’]
    I activated your plugin and I was able to save the options.

    Good Luck.

    Thread Starter James

    (@jmdesignsolutions)

    Thanks for the reply, I knew it would be something simple! I ended up going with the Widget Builder plugin as I need something a bit more flexible for my site which works great – https://www.ads-software.com/plugins/widget-builder/

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘WordPress Custom Widget Select Options Not Saving’ is closed to new replies.