Support » Fixing WordPress » Customized Recent Post WP Default Widget issue, need help.

  • Resolved Jason818

    (@jason818)



    Okay, So I copied the code from the wordpress default widgets and renamed it and added it to my functions php. I wanted to add an image to it which I did and worked. My issue is even though I renamed the widget it also applied it to the default one which I didn’t want. I want to offer the default option which is link only and mine with post image in it. can someone help me out?

    Here is my custom-post-type.php code:

    <?php 
    
    /**
     * Recent_Posts widget class
     *
     * @since 2.8.0
     */
    
    class jr2_recent_posts_widget extends WP_Widget {
    
    	function __construct() {
    		$widget_ops = array('classname' => 'jr2_widget_recent_entries', 'description' => __( "The most recent posts on your site") );
    		parent::__construct('recent-posts', __('JR2 Recent Posts'), $widget_ops);
    		$this->alt_option_name = 'jr2_widget_recent_entries';
    
    		add_action( 'save_post', array($this, 'flush_widget_cache') );
    		add_action( 'deleted_post', array($this, 'flush_widget_cache') );
    		add_action( 'switch_theme', array($this, 'flush_widget_cache') );
    	}
    
    	function widget($args, $instance) {
    		$cache = wp_cache_get('jr2_widget_recent_posts', 'widget');
    
    		if ( !is_array($cache) )
    			$cache = array();
    
    		if ( ! isset( $args['widget_id'] ) )
    			$args['widget_id'] = $this->id;
    
    		if ( isset( $cache[ $args['widget_id'] ] ) ) {
    			echo $cache[ $args['widget_id'] ];
    			return;
    		}
    
    		ob_start();
    		extract($args);
    
    		$title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' );
    		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
    		$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 10;
    		if ( ! $number )
     			$number = 10;
    		$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
    
    		$r = new WP_Query( apply_filters( 'jr2_widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) );
    		if ($r->have_posts()) :
    ?>
    		<?php echo $before_widget; ?>
    		<?php if ( $title ) echo $before_title . $title . $after_title; ?>
    		<ul>
    		<?php while ( $r->have_posts() ) : $r->the_post(); ?>
    			<li>
    				<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
    				<a href="<?php the_permalink() ?>" title="<?php echo esc_attr( get_the_title() ? get_the_title() : get_the_ID() ); ?>"><?php if ( get_the_title() ) the_title(); else the_ID(); ?></a>
    				<?php if ( $show_date ) : ?>
    				<span class="post-date"><?php echo get_the_date(); ?></span>
    			<?php endif; ?>
    			</li>
    		<?php endwhile; ?>
    		</ul>
    		<?php echo $after_widget; ?>
    <?php
    		// Reset the global $the_post as this query will have stomped on it
    		wp_reset_postdata();
    
    		endif;
    
    		$cache[$args['widget_id']] = ob_get_flush();
    		wp_cache_set('jr2_widget_recent_posts', $cache, 'widget');
    	}
    
    	function update( $new_instance, $old_instance ) {
    		$instance = $old_instance;
    		$instance['title'] = strip_tags($new_instance['title']);
    		$instance['number'] = (int) $new_instance['number'];
    		$instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false;
    		$this->flush_widget_cache();
    
    		$alloptions = wp_cache_get( 'alloptions', 'options' );
    		if ( isset($alloptions['jr2_widget_recent_entries']) )
    			delete_option('jr2_widget_recent_entries');
    
    		return $instance;
    	}
    
    	function flush_widget_cache() {
    		wp_cache_delete('jr2_widget_recent_posts', 'widget');
    	}
    
    	function form( $instance ) {
    		$title     = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
    		$number    = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5;
    		$show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false;
    ?>
    		<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 $title; ?>" /></p>
    
    		<p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:' ); ?></label>
    		<input id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>
    
    		<p><input class="checkbox" type="checkbox" <?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" />
    		<label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' ); ?></label></p>
    <?php
    	}
    }
    
     ?>

    In my functions.php file:

    /* -- jr2 recent post widget --
    ----------------------------------------------------------- -- */
    require_once( TEMPLATEPATH . '/widgets/custom-post-type.php' );
    
    function jr2_recent_posts_custom_widgets() {
        register_widget( 'jr2_recent_posts_widget' );
    }
    
    add_action( 'widgets_init', 'jr2_recent_posts_custom_widgets' );
Viewing 3 replies - 1 through 3 (of 3 total)
  • Jason818

    (@jason818)

    I just realized by doing this it over rite the default widget and only displays mine even thought I created it into t separate file and renamed it. I wanted to be able to display both.

    Jason818

    (@jason818)

    okay i figured it out for those that are interested I changed the following:

    function __construct() {
    		$widget_ops = array('classname' => 'jr2_widget_recent_entries', 'description' => __( "The most recent posts on your site") );
    		parent::__construct('recent-posts', __('JR2 Recent Posts'), $widget_ops);
    		$this->alt_option_name = 'jr2_widget_recent_entries';
    
    		add_action( 'save_post', array($this, 'flush_widget_cache') );
    		add_action( 'deleted_post', array($this, 'flush_widget_cache') );
    		add_action( 'switch_theme', array($this, 'flush_widget_cache') );
    	}
    function __construct() {
    		parent::__construct(
    			'jr2_recent_post_widget', // Base ID
    			'JR2 Recent Post', // Name
    			array( 'description' => __( 'Most recent posts on your site'), ) // Args
    		);
    		$this->alt_option_name = 'widget_recent_entries';
    		add_action( 'save_post', array($this, 'flush_widget_cache') );
    		add_action( 'deleted_post', array($this, 'flush_widget_cache') );
    		add_action( 'switch_theme', array($this, 'flush_widget_cache') );
    	}
    Jason818

    (@jason818)

    The Parent construct name could not simply be modified it had to be completely be renamed.

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Customized Recent Post WP Default Widget issue, need help.’ is closed to new replies.