This is my first widget. This widget loads a random image from the media library and then displays it. The image can be linked to the post it is associated with. The post title can be shown below the image and the title above the image can be changed in the widget settings. This is not a very complex widget, but it does do something useful for me which is why I wrote it.
The code:
<?php
/*
Plugin Name: Random Photo
Plugin URI: http://www.serenityrv.net/plugins/randphoto
Description: Widget to display a random photo from the media library linked to its post
Version: 0.1
Author: Daniel Smeltzer
Author URI: http://www.codecompost.com
License: Unknown
*/</p>
<p>add_action('widgets_init', 'ri_register_widget');</p>
<p>function ri_register_widget() {
register_widget('ri_widget');
}</p>
<p>class ri_widget extends WP_Widget {
function ri_widget() {
$widget_ops = array('classname' => 'ri_widget', 'description' => 'Display random post image');
$this->WP_Widget('ri_widget', 'Random Image Widget', $widget_ops);
}</p>
<p> function form($instance) {</p>
<p> $instance = wp_parse_args((array) $instance, array('title' => 'Random Image', 'link_post'=>true, 'post_title'=>false));</p>
<p> $title = strip_tags($instance['title']);</p>
<p> ?></p>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>">Title:</label> </p>
<input class="widefat" name="<?php echo $this->get_field_name('title'); ?>" id="<?php $this->get_field_id('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" />
</p>
<p><input type="checkbox" class="checkbox" name="<?php echo $this->get_field_name('link_post'); ?>" id="<?php echo $this->get_field_id('link_post'); ?>" <?php checked($instance['link_post'], true); ?> />
<label for="<?php echo $this->get_field_id('link_post'); ?>">Link to post</label></p>
<input type="checkbox" class="checkbox" name="<?php echo $this->get_field_name('post_title'); ?>" id="<?php echo $this->get_field_id('post_title'); ?>" <?php checked($instance['post_title'], true); ?> />
<label for="<?php echo $this->get_field_id('post_title'); ?>">Show post title</label>
</p>
<p> <?php
}</p>
<p> function update($new_instance, $old_instance) {</p>
<p> $instance = array('link_post' => 0, 'post_title' => 0);</p>
<p> $instance['title'] = strip_tags(esc_attr($new_instance['title']));</p>
<p> if (isset($new_instance['link_post']))
$instance['link_post'] = 1;</p>
<p> if (isset($new_instance['post_title']))
$instance['post_title'] = 1;</p>
<p> return $instance;
}</p>
<p> function widget($args, $instance) {
global $post;
extract($args);</p>
<p> echo $before_widget;</p>
<p> $title = apply_filters('widget_title', $instance['title']);</p>
<p> echo $before_title . $title . $after_title;</p>
<p> //$images =& get_children('post_type=attachment&numberposts=1&orderby=rand()');
$args = array('post_type' => 'attachment', 'numberposts' => 1, 'post_parent' => null, 'post_mime_type' => 'image', 'orderby' => 'rand');
$images = get_posts($args);
if (empty($images)) {
echo "not found";
} else {
foreach ($images as $image) {
$parent = get_post($image->post_parent);
if ($instance['link_post']) {
echo "<a href=\"" . get_permalink($parent->ID) . "\">";
}
echo wp_get_attachment_image($image->ID);</p>
<p> if ($instance['post_title']) {
echo "
" . $parent->post_title;
}</p>
<p> if ($instance['link_post']) {
echo "</a>";
}
}
}</p>
<p> echo $after_widget;
}
}
?>