0

I am trying to make a custom widget. My codes are as follows:

class techno_widget extends WP_Widget {

    function __construct() {
    parent::__construct(

    'techno_widget', 

     __('Recent Full Post', 'techno_widget_domain'), 

    array( 'description' => __( 'A full post will be appeared on Sidebar', 'techno_widget_domain' ), ) 
);
}

public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] );
$blog-title = $instance['blog-title'];

echo $args['before_widget'];
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];

echo $instance['blog-title'];                   

echo $args['after_widget'];
}

public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'wpb_widget_domain' );
}

$blog-title = $instance[ 'blog-title' ];

?>
<p>
<label for="<?php echo $this->get_field_id( 'blog-title' ); ?>"><?php  _e( 'Select Title:' ); ?></label> 
<select class="widefat" id="<?php echo $this->get_field_id( 'blog-title' ); ?>" name="<?php echo $this->get_field_name( 'blog-title' ); ?>">

<?php  

                $fullpost = new WP_Query(array(
                    'post_type' => 'post',                      
                ));

if($fullpost->have_posts()): while($fullpost->have_posts()): $fullpost->the_post(); ?>

    <option value="<?php the_title();?>"><?php the_title();?></option>

<?php endwhile; endif;?>

</select>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
</p>
<?php 
}

public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}

function techno_load_widget() {
register_widget( 'techno_widget' );
}
add_action( 'widgets_init', 'techno_load_widget' );

Now wordpress show an error. It tells,

Parse error: syntax error, unexpected '=' in C:\xampp\htdocs\wpexperiment\wp-content\themes\lawyer\functions.php on line 87

Whats wrong with my code? How can I get the value of my select box?

1 Answer 1

0

You missed the ending curly brace of the class techno_widget, you need to call the function techno_load_widget outside of the class techno_widget and you declared the variable '$blog-titlewrong. You can't declare variable with-. It is core PHP` convention. So I rewrite your code like below-

class techno_widget extends WP_Widget {

    function __construct() {
        parent::__construct(

            'techno_widget',

            __('Recent Full Post', 'techno_widget_domain'),

            array( 'description' => __( 'A full post will be appeared on Sidebar', 'techno_widget_domain' ), )
        );
    }

    public function widget( $args, $instance ) {
        $title = apply_filters( 'widget_title', $instance['title'] );
        $blog_title = $instance['blog_title'];

        echo $args['before_widget'];
        if ( ! empty( $title ) )
            echo $args['before_title'] . $title . $args['after_title'];

        echo $instance['blog_title'];

        echo $args['after_widget'];
    }

    public function form( $instance ) {
        if ( isset( $instance[ 'title' ] ) ) {
            $title = $instance[ 'title' ];
        }
        else {
            $title = __( 'New title', 'wpb_widget_domain' );
        }

        $blog_title = $instance[ 'blog_title' ];

        ?>
        <p>
            <label for="<?php echo $this->get_field_id( 'blog_title' ); ?>"><?php  _e( 'Select Title:' ); ?></label>
            <select class="widefat" id="<?php echo $this->get_field_id( 'blog_title' ); ?>" name="<?php echo $this->get_field_name( 'blog_title' ); ?>">

                <?php

                $fullpost = new WP_Query(array(
                    'post_type' => 'post',
                ));

                if($fullpost->have_posts()): while($fullpost->have_posts()): $fullpost->the_post(); ?>

                    <option value="<?php the_title();?>"><?php the_title();?></option>

                <?php endwhile; endif;?>

            </select>
        </p>
        <p>
            <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>
        <?php
    }

    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
        return $instance;
    }
}
function techno_load_widget() {
    register_widget( 'techno_widget' );
}

add_action( 'widgets_init', 'techno_load_widget' );

And that was working. Here is the screenshot- enter image description here

Now you can modify this code as you wish. But I think where you used $instance['blog-title'](in my code that is $instance['blog_title']) there may be you could use $instance['title'].

And you can get the input as getting input form any other input fields. For further information please google it.

6
  • Yes, There were some syntax error. But the problem which I mentioned is not solved still now. "echo $instance['blog_title'];" in widget function does not work. It does not show anything. @the_dramatist
    – Kallol Das
    Aug 31, 2016 at 6:46
  • Use $instance['title']. Hope that's gonna work.
    – CodeMascot
    Aug 31, 2016 at 6:47
  • Yes, Its working but both of them showing the same widget title :-D :-D I am not getting blog post title. I want to get value from the select box. Do you have any Idea about that?
    – Kallol Das
    Aug 31, 2016 at 6:54
  • I already told in the answer. Look that. Your widget select input works as any other HTML input. Just do some google you'll get your answer. And for post title you need to run query for that.
    – CodeMascot
    Aug 31, 2016 at 7:14
  • @KallolDas, if this answer helped you, would you please consider to accept it ? It would be very helpful.
    – CodeMascot
    Oct 18, 2016 at 8:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.