• Решено smargelov

    (@smargelov)


    Добрый день.

    Помогите мне, пожалуйста. Мне нужно сделать отдельные страницы, на которых будут данные по временным промежуткам:

    1. Страница со списком самых просматриваемых записей за неделю, месяц и год.
    2. Страница с тэгами, которые использовались за последнюю неделю, месяц, год.

    По первой странице, если я правильно понимаю, после установки плагина WP-PostViews, использовать код:

    <?php if (function_exists('get_most_viewed')): ?>
    <?php get_most_viewed(); ?>
    <?php endif; ?>

    А вот как сделать выборку по времени, я не знаю. Не хватает знаний php.
    Соответственно, можно подсказать только по одной из страниц. Вторую я уже смогу, надеюсь, по аналогии сделать.

    Заранее благодарен.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Yui

    (@fierevere)

    永子

    jetpack wordpress stats

    Автор smargelov

    (@smargelov)

    Yui
    Спасибо. Но есть ли смысл использовать такой комбайн для столь незначительной задачи.
    Вы мне часто помогали, и я уверен, что вы знаете, как решить мои задачи кодом.
    Да и сайт пока закрыт от посетителей, а соответственно подключить его к wordpress.com тоже пока не получается.
    А еще хотелось бы немного прокачать скиллы )))

    Не сочтите за наглость, но сделайте доброе дело. Помогите неопытному коллеге. )))

    Автор smargelov

    (@smargelov)

    В общем, для вывода популярных постов по периодам, сделал следующее:
    взял кусок кода из плагина 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;
    }

    Но как это сделать?

    Ээээх, надо было учиться на программиста, а не на техника механика (((

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Страницы со статистическими данными блога» закрыта для новых ответов.