• Hello All,

    I’m using the Responsive Image Widget to have a series of 5 images arranged vertically in the sidebar, each with its own caption. You can see the work-in-progress here, in the sidebar on the right, below the caption “Our Websites”.

    I have two questions:

    1) How to I reduce the spacing between the caption and the image, and how do I change the position of the caption from above to below the image please?

    2) How do I reduce the vertical spacing between each image and the neighboring ones (i.e. the one above and the one below)?

    I could not find those options in the UI of the widget/plugin. I guess they are in the code, but unfortunately I don’t know css.

    The code is the following:

    <?php
    /*
    Plugin Name: Responsive Image Widget
    Plugin URI: https://keokee.com
    Description: Displays a responsive image with an optional link.  An easy way to place reliably scaled images in the sidebar or other widget area.  The image scales to 100% of the width of its container and the height ratio provided.
    Author: Benjamin Robinson, Keokee Creative Group
    Version: 1.4
    Author URI: https://keokee.com/
    */
    
    class ResponsiveImageWidget extends WP_Widget
    {
      function ResponsiveImageWidget()
      {
        $widget_ops = array('classname' => 'ResponsiveImageWidget', 'description' => 'Displays a single responsive image of a specified ratio which can be linked.' );
        $this->WP_Widget('ResponsiveImageWidget', 'Responsive Image Widget', $widget_ops);
      }
    
      function form($instance)
      {
        $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
        $title = $instance['title'];
    	$image_url = $instance['image_url'];
    	$image_link = $instance['image_link'];
    	$image_ratio = $instance['image_ratio'];
    	$image_position = $instance['image_position'];
    ?>
      <p>
    	<label for="<?php echo $this->get_field_id('title'); ?>">
    	Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" />
    	</label>
      </p>
      <p>
    	<label for="<?php echo $this->get_field_id('image_url'); ?>">
    	Image File URL: <input class="widefat" id="<?php echo $this->get_field_id('image_url'); ?>" name="<?php echo $this->get_field_name('image_url'); ?>" type="text" value="<?php echo attribute_escape($image_url); ?>" />
    	</label>
      </p>
      <p>
    	<label for="<?php echo $this->get_field_id('image_ratio'); ?>">
    	Image Height Ratio % : <input class="widefat" id="<?php echo $this->get_field_id('image_ratio'); ?>" name="<?php echo $this->get_field_name('image_ratio'); ?>" type="number" value="<?php echo attribute_escape($image_ratio); ?>" />
    	(100 = square.)
        </label>
      </p>
      <p>
    	<label for="<?php echo $this->get_field_id('image_position'); ?>">
    	Crop From: <select class="widefat" id="<?php echo $this->get_field_id('image_position'); ?>" name="<?php echo $this->get_field_name('image_position'); ?>">
     			<?php /* $options = array('center', 'right', 'left', 'top', 'bottom');
    			foreach ($options as $option) {
    				echo '<option value="' . $option . '" id="' . $option . '"', $select == $option ? ' selected="selected"' : '', '>', $option, '</option>';
    			}*/
    			?>
                <option value="center">Center</option>
                <option value="left">Left</option>
                <option value="right">Right</option>
                <option value="top">Top</option>
                <option value="bottom">Bottom</option>
    			</select>
        </label>
      </p>
      <p>
    	<label for="<?php echo $this->get_field_id('image_link'); ?>">
    	URL to Link To (optional): <input class="widefat" id="<?php echo $this->get_field_id('image_link'); ?>" name="<?php echo $this->get_field_name('image_link'); ?>" type="text" value="<?php echo attribute_escape($image_link); ?>" />
    	</label>
      </p>
    <?php
      }
    
      function update($new_instance, $old_instance)
      {
        $instance = $old_instance;
        $instance['title'] = $new_instance['title'];
    	$instance['image_url'] = $new_instance['image_url'];
    	$instance['image_link'] = $new_instance['image_link'];
    	$instance['image_ratio'] = $new_instance['image_ratio'];
    	$instance['image_position'] = $new_instance['image_position'];
        return $instance;
      }
    
      function widget($args, $instance)
      {
        extract($args, EXTR_SKIP);
    
        echo $before_widget;
    
    	$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
    	$image_url = $instance['image_url'];
    	$image_link = $instance['image_link'];
    	$image_ratio = $instance['image_ratio'];
    	$image_position = $instance['image_position'];
    
    	if (!empty($title))
          echo '<div class="responsive-image-title">' . $before_title . $title . $after_title . '</div>';
    
    	// Default to square if field is blank.
    	if(!$image_ratio) { $image_ratio = 100; }
    
    	// Make sure that the background fits with the ratio of the image.
    	list($width, $height, $type, $attr) = getimagesize($image_url);
    	if( (($height / $width)*100) <= $image_ratio ) {
    		$background_size_correct = "background-size: auto 100% !important;";
    	} else {
    		$background_size_correct = "background-size: 100% !important;";
    	}
    
    	// Display the image -- uses the image as a background for a blank div rather than an "img" tag, this allows easy resizing with background properties
    	if($image_link) {
    
    		echo '<a style="display: block !important;" href="'.$image_link.'" title="'. $title .'">';
    		echo '<div class="responsive-image-widget" style="position: relative; width: 100%; padding-bottom: '.$image_ratio.'%; background-image: url(' . $image_url . ') !important; background-position:
    '.$image_position.'; '.
    $background_size_correct .' background-repeat: no-repeat;"></div>';
    		echo '</a>';
    	} else {
    			echo '<div style="position: relative; width: 100%; padding-bottom: '.$image_ratio.'%; background-image: url('. $image_url .') !important; background-position: '.$image_position.';  '.
    $background_size_correct .'
    background-repeat: no-repeat;"></div>';
    	}
    
        echo $after_widget;
      }
    
    }
    add_action( 'widgets_init', create_function('', 'return register_widget("ResponsiveImageWidget");') );?>
  • The topic ‘Responsive Image Widget’ is closed to new replies.