Группировка новостей по месяцам и датам

Создание сайтов — одна из наших самых сильных сторон. Создание сайта проходит при тесном контакте с клиентом, чтобы результат нашей работы стал идеальным и максимально эффективным. Мы выясняем потребности клиента, требования по срокам, предпочтения и на основании этих данных создаём эффективное решение.
/**
 * @snippet       List of Default Actions
 * @how-to        Visual Hook
 * @author        Александр Леванюк
 * @updated       WooCommerce 4.0 +
 * @donate        https://vrezerve.com
 */
/* Функция вывода постов по месяцу.
 ----------
 * Параметры:
 * $show_comment_count(0) - показывать ли колличество комментариев. 1 - показывать.
 * $before ('<h4>') - HTML тег до заголовка (названия месяца).
 * $after ('</h4>') - HTML тег после заголовка.
 * $year (0) - огриничить вывод годом. Если указать 2009, будут выведены записи за 2009 год по месяцам
 * $post_type ('post') - тип поста. Если нужно вывести нестандартный тип постов (отличный от post)
 * $limit(100) - ограничение количества выводиммых постов для каждого месяца. При большой базе, создается сильная нагрузка. Укажите 0 если нужно снять ограничение
 ----------
 Пример вызова: <php echo get_blix_archive(1, '<h4>', '</h4>'); ?>
*/​

function

function get_blix_archive($show_comment_count = 0, $before = '<h3>', $after = '</h3>', $year = 0, $post_type = 'post', $limit = 100)
{

	global $month, $wpdb;
	$result = '';

	$AND_year = $year ? $wpdb->prepare(" AND YEAR(post_date) = %s", $year) : '';
	$LIMIT    = $limit ? $wpdb->prepare(" LIMIT %d", $limit) : '';

	$arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(ID) as posts FROM " . $wpdb->posts . " WHERE post_type='$post_type' $AND_year AND post_status='publish' GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC");

	if ($arcresults) {
		foreach ($arcresults as $arcresult) {
			$url  = get_month_link($arcresult->year, $arcresult->month);
			$text = sprintf('%s %d', $month[zeroise($arcresult->month, 2)], $arcresult->year);
			$result .= get_archives_link($url, $text, '', $before, $after);

			$thismonth = zeroise($arcresult->month, 2);
			$thisyear = $arcresult->year;

			$arcresults2 = $wpdb->get_results("SELECT ID, post_date, post_title, comment_status, guid, comment_count FROM " . $wpdb->posts . " WHERE post_date LIKE '$thisyear-$thismonth-%' AND post_status='publish' AND post_type='$post_type' AND post_password='' ORDER BY post_date DESC $LIMIT");

			if ($arcresults2) {
				$result .= "<ul class=\"list list-icons list-primary list-borders postspermonth\">\n";
				foreach ($arcresults2 as $arcresult2) {
					if ($arcresult2->post_date != '0000-00-00 00:00:00') {
						$url       =  get_permalink($arcresult2->ID); //$arcresult2->guid;
						$arc_title = $arcresult2->post_title;

						if ($arc_title) $text = strip_tags($arc_title);
						else $text = $arcresult2->ID;

						$result .= "<li>" . get_archives_link($url, $text, '');
						if ($show_comment_count) {
							$cc = $arcresult2->comment_count;
							//if( $arcresult2->comment_status == "open" OR $comments_count > 0) $result .= " ($cc)";
						}
						$result .= "</li>\n";
					}
				}
				$result .= "</ul>\n";
			}
		}
	}

	return $result;
}
?>​

echo

<div class="blog-posts posts-medium posts-container">
	<?php echo get_blix_archive(1, '<h2 class="arch-tile">', '</h2>'); ?>
</div>​

Вы нашли эту статью полезной?