WordPress как на ладони
Черная пятница на хостинге fornex.com! Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

Виджет популярных записей за период времени

Всем привет сделал виджет популярных записей.
А вот вывод за период времени не получается, пните пожалуйста в нужном направлении.

Счетчик просмотров:

add_action('wp_head', 'brilias_postviews');
function brilias_postviews() {
	setPostViews(get_the_ID());
}

function getPostViews($postID) {
	$count_key = 'post_views_count';
	$count = get_post_meta($postID, $count_key, true);
	if($count=='') {
		delete_post_meta($postID, $count_key);
		add_post_meta($postID, $count_key, '0');
		return "0 просмотров";
	}
	return ' Просмотров: '.$count;
 }

 function setPostViews($postID) {
	$count_key = 'post_views_count';
	$count = get_post_meta($postID, $count_key, true);
	if($count=='') {
		$count = 0;
		delete_post_meta($postID, $count_key);
		add_post_meta($postID, $count_key, '0');
	} else {
		$count++;
		update_post_meta($postID, $count_key, $count);
	}
 }

Виджет:

<?php

if ( basename( $_SERVER['PHP_SELF'] ) == basename( __FILE__ ) ) {
	die('<h1>Отказано в доступе!</h1>');
}

class Foo_Widget extends WP_Widget {
	function __construct() {
		parent::__construct(
			'foo_widget',
			'Популярные записи',
			array( 'description' => 'Вывод популярных записей', /*'classname' => 'my_widget',*/ )
		);
	}

	/** Frontend out
	 *  @param array $args     аргументы виджета.
	 *  @param array $instance сохраненные данные из настроек
	 */
	function widget( $args, $instance ) {
		$title = apply_filters( 'widget_title', $instance['title'] );
		$param_cat = $instance['cat_id'];
		$param_period = $instance['period'];
		$param_quantity = $instance['quantity'];

		$args = array(
			'post_status' => 'publish',
			'category__in' => $param_cat,
			'posts_per_page' => $param_quantity,
			'meta_key' => 'post_views_count',
			'orderby' => 'meta_value_num',
			'order' => 'DESC'
		); ?>

	<div class="top-posts">
	<?php 
		echo $instance['title'];

		$result = new WP_Query($args);
		while ($result->have_posts()) { $result->the_post(); ?>

		<li class="popular-posts-item">
			<i class="fas fa-circle popular-posts-circle"></i>
			<a href="<?php the_permalink() ?>">
				<?php
					$excerpt = wp_trim_words( get_the_excerpt(), 15, '...' );
					echo $excerpt;
				?>
			</a>
		</li>

		<?php } wp_reset_postdata(); ?>
	</div>
		<?php }

	// Backend options
	function form( $instance ) {
		$title = @ $instance['title'] ?: 'Заголовок';
		$cat = @ $instance['cat_id'] ?: '1';
		$period = @ $instance['period'] ?: '1';
		$quantity = @ $instance['quantity'] ?: '1';
	?>

	<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Заголовок:' ); ?></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_html( $title ); ?>">

	<label for="<?php echo $this->get_field_id( 'cat' ); ?>"><?php _e( 'ID Категории:' ); ?></label>
	<input class="widefat" id="<?php echo $this->get_field_id( 'cat_id' ); ?>" name="<?php echo $this->get_field_name( 'cat_id' ); ?>" type="text" value="<?php echo esc_attr( $cat ); ?>">

	<label for="<?php echo $this->get_field_id( 'period' ); ?>"><?php _e( 'Период времени:' ); ?></label>
	<input class="widefat" id="<?php echo $this->get_field_id( 'period' ); ?>" name="<?php echo $this->get_field_name( 'period' ); ?>" type="text" value="<?php echo esc_attr( $period ); ?>">

	<label for="<?php echo $this->get_field_id( 'quantity' ); ?>"><?php _e( 'Количество записей:' ); ?></label>
	<input class="widefat" id="<?php echo $this->get_field_id( 'quantity' ); ?>" name="<?php echo $this->get_field_name( 'quantity' ); ?>" type="text" value="<?php echo esc_attr( $quantity ); ?>">

	<?php }

	// Update backend options
	function update( $new_instance, $old_instance ) {
		$instance = array();
		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? ( $new_instance['title'] ) : '';
		$instance['cat_id'] = ( ! empty( $new_instance['cat_id'] ) ) ? strip_tags( $new_instance['cat_id'] ) : '';
		$instance['period'] = ( ! empty( $new_instance['period'] ) ) ? strip_tags( $new_instance['period'] ) : '';
		$instance['quantity'] = ( ! empty( $new_instance['quantity'] ) ) ? strip_tags( $new_instance['quantity'] ) : '';

		return $instance;
	}
} 

// Register Popular Posts Widget
add_action( 'widgets_init', 'register_foo_widget' );
function register_foo_widget() {
	register_widget( 'Foo_Widget' );
}

?>
0
3 месяца назад
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация