В общем, для вывода популярных постов по периодам, сделал следующее:
взял кусок кода из плагина WP-PostViews и закинув его в functions.php изменил немного, что бы получилось следующее
### Function: Display Most Viewed Page/Post
if(!function_exists('get_most_viewed_365')) {
function get_most_viewed_365($mode = '', $limit = 10, $chars = 0, $display = true) {
global $wpdb;
$views_options = get_option('views_options');
$where = '';
$temp = '';
$output = '';
if(!empty($mode) && $mode != 'both') {
$where = "post_type = '$mode'";
} else {
$where = '1=1';
}
$start_date = mktime(0,0,0,date("m"),date("d"),date("Y")-1);
$date_limit = "post_date BETWEEN '".date("Y-m-d", $start_date)."' AND '".current_time('mysql')."'";
$most_viewed = $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE $date_limit AND $where AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
if($most_viewed) {
foreach ($most_viewed as $post) {
$post_views = intval($post->views);
$post_title = get_the_title($post);
if($chars > 0) {
$post_title = snippet_text($post_title, $chars);
}
$post_excerpt = views_post_excerpt($post->post_excerpt, $post->post_content, $post->post_password, $chars);
$temp = stripslashes($views_options['most_viewed_template']);
$temp = str_replace("%VIEW_COUNT%", number_format_i18n($post_views), $temp);
$temp = str_replace("%POST_TITLE%", $post_title, $temp);
$temp = str_replace("%POST_EXCERPT%", $post_excerpt, $temp);
$temp = str_replace("%POST_CONTENT%", $post->post_content, $temp);
$temp = str_replace("%POST_URL%", get_permalink($post), $temp);
$output .= $temp;
}
} else {
$output = '<li>'.__('Нет записей', 'wp-postviews').'</li>'."\n";
}
if($display) {
echo $output;
} else {
return $output;
}
}
}
то есть изменил название функции и добавил
$start_date = mktime(0,0,0,date("m"),date("d"),date("Y")-1);
$date_limit = "post_date BETWEEN '".date("Y-m-d", $start_date)."' AND '".current_time('mysql')."'";
Но вот какой вопрос меня гложет: для того, что бы сделать вывод 3-х периодов, мне пришлось вставлять этот код 3 раза изменяя при этом пару строк. И всё из-за неразвитых скилов PHP.
Помогите оптимизировать этот код. В идеале, в функции должен быть параметр или атрибут (прошу прощения за незнание терминологии), добавляя который отнималось соответствующее кол-во дней от start_date.
Был бы очень признателен за помощь.
Ну и с облаками тегов так ничего и не придумал. Может быть использовать фильтр на основе функции типа такой:
function filter_where_365( $where = '' ) {
// за последние 365 дней
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-365 days')) . "'";
return $where;
}
Но как это сделать?
Ээээх, надо было учиться на программиста, а не на техника механика (((