badget

Biggest Sale! Special Offer!

Get 30% discount on all of our single themes with this coupon code: #30%SALE

Hurry up! *Limited time offer*

David

Forum Replies Created

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • David
    Member

    Thank You! That works beautifully. I posted a mistake above where it says <?php get_excerpt(); ?>
    it should read
    <?php echo get_excerpt(); ?>
    Here is the code in my functions.php in it’s entirety.

    <?php
    /**
    *Function that trims excerpt by number of characters and ensures that the last word doesn't get cut off
     */
    function get_excerpt(){
    $excerpt = get_the_content();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, 360);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt = '<p>'.$excerpt.'... </p>';
    return $excerpt;
    }
    /**
     * Widget for business layout that shows selected page content,title and featured image. Uses function above to control excerpt length by number of characters and not words
     * Construct the widget.
     * i.e. Name, description and control options.
     */
    class interface_child_service_widget extends WP_Widget {
    	function interface_child_service_widget() {
    		$widget_ops = array( 'classname' => 'widget_service', 'description' => __( 'Display Services by no.of chars( Business Layout )', 'interface' ) );
    		$control_ops = array( 'width' => 200, 'height' =>250 );
    		parent::WP_Widget( false, $name = __( 'Theme Horse: Services Custom', 'interface' ), $widget_ops, $control_ops);
    	}
    
    	function form( $instance ) {
    		$instance = wp_parse_args( (array) $instance, array( 'number' => '8','page_id0'=>'','page_id1'=>'','page_id2'=>'','page_id3'=>'','page_id4'=>'','page_id5'=>'','page_id6'=>'','page_id7'=>'',));
    		$number = absint( $instance[ 'number' ] );
    		for ( $i=0; $i<$number; $i++ ) {
    			$var = 'page_id'.$i;
    			$defaults[$var] = '';
    		} ?>
    		<p>
    			<label for="<?php echo $this->get_field_id('number'); ?>">
    				<?php _e( 'Number of Services:', 'interface' ); ?>
    			</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>
    
    		<?php	for ( $i=0; $i<$number; $i++ ) {
    			$var = 'page_id'.$i;
    			$var = absint( $instance[ $var ] );
    		}
    		?>
    		<?php for( $i=0; $i<$number; $i++) { ?>
    		<p>
    			<label for="<?php echo $this->get_field_id( key($defaults) ); ?>">
    				<?php _e( 'Page', 'interface' ); ?>
    				:</label>
    				<?php wp_dropdown_pages( array( 'show_option_none' =>' ','name' => $this->get_field_name( key($defaults) ), 'selected' => $instance[key($defaults)] ) ); ?>
    			</p>
    			<?php
    		next( $defaults );// forwards the key of $defaults array
    	}
    }
    
    function update( $new_instance, $old_instance ) {
    	$instance = $old_instance;
    	$instance['number'] = absint( $new_instance['number'] );
    
    	for( $i=0; $i<$instance['number']; $i++ ) {
    		$var = 'page_id'.$i;
    		$instance[ $var] = absint( $new_instance[ $var ] );
    	}
    
    	return $instance;
    }
    
    function widget( $args, $instance ) {
    	extract( $args );
    	extract( $instance );
    	$number = empty( $instance['number'] ) ? 8 : $instance['number'];
    
    	global $post;
    	global $interface_theme_setting_value;
    	$options = $interface_theme_setting_value;
    	$page_array = array();
    	for( $i=0; $i<$number ; $i++ ) {
    		$var = 'page_id'.$i;
    		$page_id = isset( $instance[ $var ] ) ? $instance[ $var ] : '';
    
    		if( !empty( $page_id ) )
     				array_push( $page_array, $page_id );// Push the page id in the array
     		}
     		$get_featured_pages = new WP_Query( array(
     			'posts_per_page' 			=> -1,
     			'post_type'					=>  array( 'page' ),
     			'post__in'		 			=> $page_array,
     			'orderby' 		 			=> 'post__in'
     			) );
     			echo $before_widget; ?>
     			<div class="column clearfix">
     				<?php
     				$j = 1;
     				while( $get_featured_pages->have_posts() ):$get_featured_pages->the_post();
     				$page_title = get_the_title();
     				if( $j % 4 == 3 && $j > 1 ) {
     					$service_class = "one-fourth clearfix-half";
     				}
     				elseif ( $j % 4 == 1 && $j > 1 ) {
     					$service_class = "one-fourth clearfix-half clearfix-fourth";
     				}
     				else {
     					$service_class = "one-fourth";
     				}
     				?>
     				<div class="<?php echo $service_class; ?>">
     					<div class="service-item clearfix">
     						<?php
     						if ( has_post_thumbnail() ) {
     							echo'<div class="service-icon">'.get_the_post_thumbnail( $post->ID, 'icon' ).'</div>';
     						}
     						?>
     						<h3 class="service-title"><?php echo $page_title; ?></h3>
     					</div>
     					<!-- .service-item -->
     					<article>
     <?php echo get_excerpt(); ?>
     					</article>
     					<?php if( !empty( $options[ 'post_excerpt_more_text' ] ) ) { ?>
     					<a class="more-link" title="<?php the_title_attribute(); ?>" href="<?php the_permalink(); ?>">
     						<?php echo $options[ 'post_excerpt_more_text' ]; ?></a>
     						<?php } ?>
     					</div>
     					<!-- .one-fourth -->
     					<?php $j++; ?>
     					<?php endwhile;
    		 		// Reset Post Data
     					wp_reset_query();
     					?>
     				</div>
     				<!-- .column -->
     				<?php echo $after_widget;
     			}
     		}
    function myplugin_register_widgets() {
    	register_widget( 'interface_child_service_widget' );
    }
    
    add_action( 'widgets_init', 'myplugin_register_widgets' );
     		/**************************************************************************************/
    ?>
    David
    Member

    Oops , the post above should read functions.php – just to avoid confusion

    David
    Member

    Ok – I took a stab at this myself. Here is what I did if anyone else wants to do this…

    first I made a function.php file in my child theme and added the following function

    function get_excerpt(){
    $excerpt = get_the_content();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, 140);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt = '<p>'.$excerpt.'... </p>';
    return $excerpt;
    }

    On 6th line you can change the 140 to however many characters you like.

    Then on line 338 of inc/widgets/interface_widgets.php I changed the code to
    <?php get_excerpt(); ?>

    I tried making a copy of the file with the changes in my child theme but it won’t override the parent theme – therefore this change will be lost upon updating. Anyone got any thoughts on how to accomplish this without losing the changes on the next update?

    David
    Member

    Hi, Is there a way to change this to be controlled by the number of characters and not the number of words as they still end up with different heights as the words in the excerpts are different lengths. Or perhaps use <more> tags . The excerpts in your preview are all “Lorem Ipsum” and thus come out the same height. With real world text they come out with different lengths and thus heights…

Viewing 4 posts - 1 through 4 (of 4 total)