Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Widget w WordPressie z najpopularniejszymi postami bez użycia plugin’u

Cały kod z pliku najpopularniejsze-posty-widget.php:

<?php

class najpopularniejszePostyWidget extends WP_Widget {

	/**
	 * Sets up the widgets name etc
	 */
	public function __construct() {
		$widget_id = 'najpoularniejszePosty';
		$widget_name = __('Widget z najpopularniejszymi postami', 'najpopularniejszePosty');
		$widget_opt = array('description' => 'Ten widget wyświetla najpouplarniejsze posty na blogu.');

		parent::__construct($widget_id, $widget_name, $widget_opt);
	}

	/**
	 * Outputs the content of the widget
	 *
	 * @param array $args
	 * @param array $instance
	 */
	public function widget( $args, $instance ) {
		$title = apply_filters('widget_title', $instance['title']);

	    if (empty($title))
	    {
	        $title = __('Most popular posts', 'najpoularniejszePosty');
	    }

	    echo $args['before_widget'];

	    echo $args['before_title'] . esc_html($title) . $args['after_title'];

	    $arg = array(
	        'posts_per_page' => $instance['number'],
	        'meta_key' => 'post_views_count', 
	        'orderby' => 'meta_value_num'
	    );

	    $popular_posts = get_posts($arg);
	 	global $post;

	    ?>

	    <div class="posts">
			<?php foreach($popular_posts as $post) : ?>
				<?php setup_postdata( $post ); ?>
				<div class="my-articles">
	                <article>
	                    <?php if ($instance['show_thumbnail'] == TRUE && has_post_thumbnail()): ?>
	                       	<div class="post-head">
	                        	<?php the_post_thumbnail('medium'); ?>
	                        </div>
	                    <?php endif; ?>
						<div>
		                    <h3 class="post-title"><a href="<?php the_permalink(); ?>">
		                    	<?php the_title(); ?></a>
			                    <?php if( $instance['show_count'] == TRUE ) : ?>
			                    	<span>
			                    	<?php
			                    	echo "Wyświetlenia: " . get_post_meta($post->ID, 'post_views_count', true);
			                    	?>
			                    	</span>
			                    	<?php
			                   	endif; ?>
		                   	</h3>
		                    <?php if( $instance['show_excerpt'] == TRUE ) : ?>
		                        <?php echo get_the_excerpt(); ?>
		                    <?php endif; ?>
	                    </div>
	                </article>
	            </div>
			<?php endforeach; ?>
		</div>
	    
	    <?php
	}

	/**
	 * Outputs the options form on admin
	 *
	 * @param array $instance The widget options
	 */
	public function form( $instance ) {
		//set default options
        $my_defaults = array(
            'number' => 5,
            'title' => 'Najpouplarniejsze posty',
            'show_count' => false, //pokarz liczbę wyświetleń
            'show_excerpt' => false, //pokarz początek wpisu
            'show_thumbnail' => false //pokarz ikonę wpisu
        );
        
        //Refill options stored in the database with the default options.
        $instance = wp_parse_args( (array) $instance, $my_defaults );

    ?>
	
		<p>
            <!-- Widgets name !-->
            <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Tytuł:' ); ?></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 esc_attr($instance['title']); ?>" />
        </p>
        <p>
            <!-- Number of posts to show !-->
            <label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Liczba wyświetlanych postów:' ); ?></label>
            <input id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo $instance['number']; ?>" size="3" />
        </p>
        <p>
            <!-- Show view counts !-->
            <input class="checkbox" type="checkbox" name="<?php echo $this->get_field_name('show_count'); ?>" id="<?php echo $this->get_field_id('show_count'); ?>" value="true" <?php checked(true, $instance['show_count']);?> />
            <label for="<?php echo $this->get_field_id('show_count'); ?>"> <?php _e( 'Wyświetl liczbę wyświetleń' ); ?></label><br />
        </p>
        <p>
            <!-- Show excerpt !-->
            <input class="checkbox" type="checkbox" name="<?php echo $this->get_field_name('show_excerpt'); ?>" id="<?php echo $this->get_field_id('show_excerpt'); ?>" value="true" <?php checked(true, $instance['show_excerpt']);?> />
            <label for="<?php echo $this->get_field_id('show_excerpt'); ?>"> <?php _e( 'Wyświetl początek wpisu' ); ?></label><br />
        </p>
        <p>
            <!-- Show thumbnail !-->
            <input class="checkbox" type="checkbox" name="<?php echo $this->get_field_name('show_thumbnail'); ?>" id="<?php echo $this->get_field_id('show_thumbnail'); ?>" value="true" <?php checked(true, $instance['show_thumbnail']);?> />
            <label for="<?php echo $this->get_field_id('show_thumbnail'); ?>"> <?php _e( 'Wyświetl ikonę wpisu' ); ?></label><br />
        </p>

    <?php
	}

	/**
	 * Processing widget options on save
	 *
	 * @param array $new_instance The new options
	 * @param array $old_instance The previous options
	 */
	public function update( $new_instance, $old_instance ) {
        
        $instance = $old_instance;

        //Widgets name
        $instance['title'] = strip_tags($new_instance['title']);
        //Number of posts to show
        $instance['number'] = absint($new_instance['number']);
        //Show view counts
        $instance['show_count'] = isset($new_instance['show_count']);
        //Show excerpt
        $instance['show_excerpt'] = isset($new_instance['show_excerpt']);
        //Show thumbnail 
        $instance['show_thumbnail'] = isset($new_instance['show_thumbnail']);

        return $instance;
	}
}

?>

Przykładowy efekt:

widget-najpopularniejszePosty-4

Strony: 1 2 3 4 5 6

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , ,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest