WordPress.org

Ready to get started?Download WordPress

Forums

Adding categories to post titles, recent post widget, & popular post titles. (2 posts)

  1. thisisloze
    Member
    Posted 1 year ago #

    Hello,
    I am trying to add the categories to post titles, recent posts widget & popular posts widget. My blog is http://www.evilgns.com

    I have almost successfully done this to the post titles except the categories always shows AFTER the title which is incorrect.

    here is the code I used in loop.php to show this

    <?php // Start the loop ?>
    <?php while ( have_posts() ) : the_post(); ?>
    
    	<?php if ( count( get_the_category() ) && ( is_archive() || is_author() ) && ( !is_category() && !is_tag() ) ) : // Archives ?>
    		<li>
    
    		  <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'blaskan' ), the_title_attribute( 'echo=0' ) ); ?>">
    <?php the_title(); print(':'); printf( __( '%2$s', 'blaskan' ), 'categories-label', get_the_category_list( ', ' ) ); ?>
    </a>
    
    		  <time datetime="<?php the_date('c'); ?>"><?php print get_the_date(); ?></time>
    
    		</li>
    
    	<?php else: // Else ?>
    
    		<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    			<header>
    				<?php if ( has_post_thumbnail() ) : ?>
    				  <figure class="post-thumbnail">
    						<?php the_post_thumbnail(); ?>
    					</figure>
    				<?php endif; ?>
    
    				<?php if ( !is_single() && get_the_title() && get_the_category() ) : ?>
    					<h1>
    						<a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'blaskan' ), the_title_attribute( 'echo=0' ) ); ?>">
    							<?php the_title(); print(':'); printf( __( '%2$s', 'blaskan' ), 'categories-label', get_the_category_list( ', ' ) ); ?>
    						</a>
    					</h1>
    <?php if ( get_post_type() !== 'page' ): ?>
    				  <time datetime="<?php the_date('c'); ?>" pubdate><?php print get_the_date(); ?></time>
    				<?php endif; ?>
    				<?php elseif ( get_the_title() && get_the_category() ): ?>
    					<h1>
              <?php the_title(); print(':'); printf( __( '%2$s', 'blaskan' ), 'categories-label', get_the_category_list( ', ' ) ); ?>
    </h1>
    				<?php endif; ?>

    & as for the widgets I have opened default-widgets.php in wp-includes and I have found this code

    /**
     * Recent_Posts widget class
     *
     * @since 2.8.0
     */
    class WP_Widget_Recent_Posts extends WP_Widget {
    
    	function __construct() {
    		$widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your site") );
    		parent::__construct('recent-posts', __('Recent Posts'), $widget_ops);
    		$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') );
    	}
    
    	function widget($args, $instance) {
    		$cache = wp_cache_get('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 = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);
    		if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )
     			$number = 10;
    		$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
    
    		$r = new WP_Query( apply_filters( '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>
    				<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('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'] = (bool) $new_instance['show_date'];
    		$this->flush_widget_cache();
    
    		$alloptions = wp_cache_get( 'alloptions', 'options' );
    		if ( isset($alloptions['widget_recent_entries']) )
    			delete_option('widget_recent_entries');
    
    		return $instance;
    	}
    
    	function flush_widget_cache() {
    		wp_cache_delete('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
    	}
    }

    If someone could show me an example of how to do it in recent posts widget I am confident enough I will be able to figure it out on the popular posts widget also.

    Also about the backwards title someone told me my coding was correct it could possible be a css float or span causing the title to be backwards. I am not sure as I have only started learning PHP/CSS yesterday haha :D

  2. thisisloze
    Member
    Posted 1 year ago #

    I have got it to display the category title in the recent posts.

    As for the popular posts I am confused as it isnt organized at all clear like the recent posts widget.

    Also I still can't seem to get my title of the posts to be in the correct order - does anyone see any problem with my code?

    Also here is the code I added to recent widgets to get the category title to show in the recent posts widget if anyone is interested in using it aswell.

    /**
     * Recent_Posts widget class
     *
     * @since 2.8.0
     */
    class WP_Widget_Recent_Posts extends WP_Widget {
    
    	function __construct() {
    		$widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your site") );
    		parent::__construct('recent-posts', __('Recent Posts'), $widget_ops);
    		$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') );
    	}
    
    	function widget($args, $instance) {
    		$cache = wp_cache_get('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 = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);
    		if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )
     			$number = 10;
    		$show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false;
    
    		$r = new WP_Query( apply_filters( '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>
    				<a href="<?php the_permalink() ?>" title="<?php echo esc_attr( get_the_title() ? get_the_title() : get_the_ID() ); ?>">
    
    <?php the_category( ':', single ); ?> <?php print(':'); ?>
    
    <?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('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'] = (bool) $new_instance['show_date'];
    		$this->flush_widget_cache();
    
    		$alloptions = wp_cache_get( 'alloptions', 'options' );
    		if ( isset($alloptions['widget_recent_entries']) )
    			delete_option('widget_recent_entries');
    
    		return $instance;
    	}
    
    	function flush_widget_cache() {
    		wp_cache_delete('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
    	}
    }

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.