Master-X
Форум | Новости | Статьи
Главная » Форум » Блоги и Социальные сети » 
Тема: Накрутить показатели плагина WP-PostViews
цитата
13/03/12 в 11:44
 SMYK
День добрый. Кто-то уже делал наверное подобное.
Запускаю сайт и уж очень некрасиво нули везде смотрятся, а самому кликать или софт юзать сторонний неохота. Есть ли возможность как-то рэндомно повысить везде кол-во просмотров в разумных пределах. Скажем везде подставить числа в диапазоне 50-1300....например. Заранее спасибо за конкретику.
цитата
13/03/12 в 12:25
 Yacc
Добавить в конец functions.php

Код:
add_filter( 'get_post_metadata', 'filter_post_meta', 10, 4 );

function filter_post_meta( $null, $object_id, $meta_key, $single ) {
   remove_filter( 'get_post_metadata', 'filter_post_meta' );
   if( 0 == ( $views = get_post_meta( $object_id, 'views', TRUE ) ) AND 'views' == $meta_key )
      update_post_meta( $object_id, 'views', ( $views = rand( 50, 1300 ) ) );
   add_filter( 'get_post_metadata', 'filter_post_meta', 10, 4 );
   return $views;
}


Последний раз редактировалось: Yacc (14/03/12 в 03:53), всего редактировалось 2 раз(а)
цитата
13/03/12 в 14:41
 SMYK
Для тебя мне ничего не жалко (+4), но первый блин оказался комом icon_rolleyes.gif Никаких изменений ни в старых ни в добавленных постах не произошло

Тема, кстати, FreeWPTube4...возможно это имеет значение
цитата
13/03/12 в 15:47
 Yacc
А так? icon_smile.gif

Если не работает, значит поле называется по-другому (не views, как в коде выше).
цитата
13/03/12 в 20:45
 SMYK
Ufff, pereproboval nemalo variantov vozmozhnyh nazvanij $views iz koda...ne nashel pravilnogo...esli imelos` vvidu vse-taki pole, a ne peremennaya, to tam s etim esche slozhnee. icon_cry.gif
цитата
14/03/12 в 03:03
 photomuza
Дык плагин для того, чтобы более популярные посты выводить в топ. А так - в чем смысел-то? icon_rolleyes.gif Наберут просмотров, тогда и поставить в виджет, а пока не набрали, я бы просто виджет не включал, но счетчик считал бы. Как-то так.

А руками можно так:
ВВЕРХУ


НИЖЕ


Т.е. число в поле Value меняешь и обновляешь пост.
цитата
14/03/12 в 03:57
 Yacc
Цитата:
esli imelos` vvidu vse-taki pole, a ne peremennaya, to tam s etim esche slozhnee.

Да, именно название поля (см. картинку выше).
цитата
14/03/12 в 04:19
 SMYK
photomuza писал:
Дык плагин для того, чтобы более популярные посты выводить в топ. А так - в чем смысел-то? icon_rolleyes.gif Наберут просмотров, тогда и поставить в виджет, а пока не набрали, я бы просто виджет не включал, но счетчик считал бы. Как-то так.

А руками можно так:
ВВЕРХУ


НИЖЕ


Т.е. число в поле Value меняешь и обновляешь пост.


Спасибо. Вариант полезный, но хотелось бы на автомате присваивать новому посту определенное рэндомное кол-во просмотров...которое бы потом есст-ным путем увеличивалось. Насчет не включать счетчик пока самый реальный вариант)))
цитата
14/03/12 в 04:21
 SMYK
Yacc писал:
Да, именно название поля (см. картинку выше).


Ну наконец-то разобрался))) Но...теперь уж точно понятно, что название поля у тебя правильное и код не срабатывает...уж не знаю по какой причине)
цитата
14/03/12 в 13:56
 photomuza
Я попробовал (обнулил перед этим счетчик), работает.
цитата
14/03/12 в 14:25
 photomuza
SMYK писал:
присваивать новому посту определенное рэндомное кол-во просмотров...которое бы потом есст-ным путем увеличивалось.

Мысль верная, я ее почти реализовал с помощью нашего Yacc-а, но более хитро. Годится для постов, которые являются своими галереями, причем большие фото открываются в HTML-ах.
Идея такая:
а) считаются просмотры каждого поста (гали)
б) считаются просмотры HTML-ов каждого поста
в) функция вычисляет ратио: N-html / N-post
г) именно это ратио и выдается в рейтинг
Таким образом, популярным считается не пост с бОльшим числом просмотров (потому что вверху, либо потому что до фига набрал, либо потому что тумба удачная), а с бОльшим количеством просмотров больших фото - относительно открытия самого поста. Причем я добавил в код стоку, чтобы переход с HTML на ее же галю не считался, т.к. юзер может переходить туда и обратно для выбора большого фото, а не листая подряд HTML-ы, и без этой строки ратио будет снижаться, а это нелогично.
При таком алгоритме, совершенно не важно, старый пост или новый и сколько у него общее просмотров. Популярные всегда будет лезть в топ, непопулярные - вниз. Все эволюционирует естественным образом без всяких звездочек с оценками - ИМХО менее адекватный показатель, к тому же БД больше забивает (IP писать надо).

В общем, работает, если интересно, могу сюда код дать. У меня пока не получилось реализовать до рабочего состояния, т.к. HTML-ы генерит скрипт и нужно чтобы туда вставлялось автоматом ID поста. Если руками вставить, работает.
цитата
14/03/12 в 14:36
 photomuza
Кстати, замена плагина WP-PostViews на функцию - Функция вывода записей по количеству просмотров
цитата
15/03/12 в 15:48
 SMYK
photomuza писал:
В общем, работает, если интересно, могу сюда код дать. У меня пока не получилось реализовать до рабочего состояния, т.к. HTML-ы генерит скрипт и нужно чтобы туда вставлялось автоматом ID поста. Если руками вставить, работает.


Ну звучит ооочень занятно. Если вариант рабочий, то, конечно интересно взглянуть.

PS. Спасибо участникам...благодаря вам топик реально стал полезным и интересным.
цитата
15/03/12 в 16:26
 SMYK
photomuza писал:
Я попробовал (обнулил перед этим счетчик), работает.


Странно. У меня все так и глючит. При вставке этого кода в самый конец function.php у меня не просто не появляются просмотры, но и вдобавок пропадают все тумбы с индекса и скрины с самих галер((( Правда и обнуление счетчика я найти не могу. Вижу только его деактивацию и удаление.

PS. Экспериментирую с этим на локалке

WordPress Version 3.3.1

При включенном WP_DEBUG вылетают и такие ошибки :
Notice: has_cap was called with an argument that is deprecated since version 2.0! Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead. in E:\xampp\htdocs\domain\wp-includes\functions.php on line 3551

Notice: has_cap was called with an argument that is deprecated since version 2.0! Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead. in E:\xampp\htdocs\domain\wp-includes\functions.php on line 3551
цитата
15/03/12 в 16:34
 SMYK
DELETE
цитата
16/03/12 в 13:20
 vovkasu
А что у вас с посещаемостью?
Не будет это выглядеть не логично, когда просмотров за 200, а посещалка 2-5 в сутки?
Может не стоит заморачиваться над начальным имиджем с помощью, если так можно назвать, накрутки, а лучше порботать над контентом и создать имидж своими руками?
цитата
16/03/12 в 13:33
 mazzzer2


И кто об этом узнает?
цитата
16/03/12 в 17:10
 photomuza
SMYK писал:
Правда и обнуление счетчика я найти не могу.

Заходишь в phpMyAdmin, нажимаешь SQL, вставляешь строку:
DELETE FROM wp_postmeta WHERE meta_key = 'views';
цитата
16/03/12 в 17:48
 photomuza
SMYK писал:
Если вариант рабочий, то, конечно интересно взглянуть.

Вариант БЕЗ плагина WP-PostViews. Вставляем в function.php
/* Подсчет количества посещений страниц
---------------------------------------------------------- */
add_action('wp_head', 'kama_postviews');
function kama_postviews() {

/* ------------ Настройки -------------- */
$meta_key      = 'views';   // Ключ мета поля, куда будет записываться количество просмотров.
$who_count       = 0;          // Чьи посещения считать? 0 - Всех. 1 - Только гостей. 2 - Только зарегистрированых пользователей.
$exclude_bots    = 1;         // Исключить ботов, роботов, пауков и прочую нечесть icon_smile.gif? 0 - нет, пусть тоже считаются. 1 - да, исключить из подсчета.
$url_no_count = '/gall/'; // не считать переходы с галерей на пост
$refurl=$_SERVER['HTTP_REFERER']; // реф для проверки предыд. переменной
/* СТОП настройкам */

global $user_ID, $post;
   if(is_singular()) {
      $id = (int)$post->ID;
      static $post_views = false;
      if($post_views) return true; // чтобы 1 раз за поток
      $post_views = (int)get_post_meta($id,$meta_key, true);
      $should_count = false;
      switch( (int)$who_count ) {
         case 0: $should_count = true;
            break;
         case 1:
            if( (int)$user_ID == 0 )
               $should_count = true;
            break;
         case 2:
            if( (int)$user_ID > 0 )
               $should_count = true;
            break;
      }
      if( (int)$exclude_bots==1 && $should_count ){
         $useragent = $_SERVER['HTTP_USER_AGENT'];
         $notbot = "Mozilla|Opera"; //Chrome|Safari|Firefox|Netscape - все равны Mozilla
         $bot = "Bot/|robot|Slurp/|yahoo"; //Яндекс иногда как Mozilla представляется
         if ( !preg_match("/$notbot/i", $useragent) || preg_match("!$bot!i", $useragent) || (stripos($refurl,$url_no_count))>0)
            $should_count = false;
      }

      if($should_count)
         if( !update_post_meta($id, $meta_key, ($post_views+1)) ) add_post_meta($id, $meta_key, 1, true);
   }
   return true;
}


// yacc - РЕЙТИНГ

/*
Эти константы опрделяют названия полей (Custom Fields) поста.
POST_VIEWS   Количество просмотров постов.
HTML_VIEWS   Сумма просмотров html-ов к посту.
POST_RATING   Ратио.

Если менять, то именно здесь.
*/

define( 'POST_VIEWS', 'views' );
define( 'HTML_VIEWS', 'html_views' );
define( 'POST_RATING', 'post_rating' );


/*
Обработчик Ajax-запросов.
Выполняет основную задачу - считает HTML_VIEWS и POST_RATING.

Чтобы отключить закомментируй оба add_action ниже.
*/

add_action( 'wp_ajax_yacc_process', 'yacc_process' );
add_action( 'wp_ajax_nopriv_yacc_process', 'yacc_process' );

function yacc_process() {

   // $_POST[ 'pid' ] обязательный параметр - ID поста
   if( isset( $_POST[ 'pid' ] ) ) {
        $pid = $_POST[ 'pid' ];
      
      // Если поля POST_VIEWS ещё нет.
      // Обрати внимание, что с само поле никак не изменяется.
      // Но нужно установить $post_views для подсчёта ратио.
      if( '' === ( $post_views = get_post_meta( $pid, POST_VIEWS, TRUE ) ) )
         $post_views = 0;
         
      // Если поле HTML_VIEWS уже есть.
      if( '' !== ( $html_views = get_post_meta( $pid, HTML_VIEWS, TRUE ) ) ) {
      
         // Обновить HTML_VIEWS = HTML_VIEWS + 1
         update_post_meta( $pid, HTML_VIEWS, ++$html_views );
         
         // Обновить POST_RATING = HTML_VIEWS / POST_VIEWS
         update_post_meta( $pid, POST_RATING, $html_views / $post_views );
      }
      // Если поля HTML_VIEWS ещё нет.
        else {
      
         // Добавить поле HTML_VIEWS = 1
            add_post_meta( $pid, HTML_VIEWS, 1, TRUE );
         
         // Добавить поле POST_RATING = POST_VIEWS
         // На самом деле это нужно только для старых постов,
         // для всех вновь создаваемых это поле будет создаваться автоматически.
            add_post_meta( $pid, POST_RATING, $post_views, TRUE );
      }
    }
}

/*
Подключение обработчика мета боксов в форме редактирования поста в админке.
Нужно для создания поля POST_RATING.
*/

add_action( 'add_meta_box', 'yacc_add_field' );

function yacc_add_field() {
   if( '' === ( $html_views = get_post_meta( $pid, HTML_VIEWS, TRUE ) ) )
      add_post_meta( $pid, POST_RATING, $post_views, TRUE );
}


/*
Подключение обработчика обновления/изменения поля POST_VIEWS.
Нужно для обновления поля POST_RATING.
При каждом обновлении любого поля юбого поста будет выполнятся функция yacc_update_rating,
которой будут переданы 4 параметра:
$mid   ID поля (не используется)
$pid   ID поста
$key   название поля
$value   содержимое поля
Если это будет поле с названием, определённым константой POST_VIEWS,
то ратио поста (с ID = $pid) будет обновлено: пересчитано и сохранено.
*/
add_action( 'updated_post_meta', 'yacc_update_rating', 10, 4 );

function yacc_update_rating( $mid, $pid, $key, $value ) {
   if( POST_VIEWS == $key AND '' !== ( $html_views = get_post_meta( $pid, HTML_VIEWS, TRUE ) ) AND 0 !== $html_views )
      update_post_meta( $pid, POST_RATING, $html_views / $value );
}

/*
Выводит список заголовков постов, упорядоченных по POST_RATING.
*/

function yacc_top_posts( $count = 10 ) {
   global $wpdb;
   $q = new WP_Query(
      array(
         'posts_per_page' => $count,
         'orderby' => 'meta_value_num',
         'order' => 'DESC',
         'meta_key' => POST_RATING
      )
   );
   if( $q->have_posts() ) {
      echo '<ul>';
      while( $q->have_posts() ) {
         $q->the_post();
         $id = get_the_ID();
         echo '<li><a href="'.get_permalink( $id ).'">'.get_the_title().'</a> | '
            .get_post_meta( $id, HTML_VIEWS, 1 ).' / '
            .get_post_meta( $id, POST_VIEWS, 1 ).' = '
            .round(yacc_rating( $id ),3)
            .'</li>';
      }
      echo '</ul>';
   }
   else {
      echo '<h2>No posts found</h2>';
   }
}

function yacc_rating( $pid, $d = 1 ) {
   if( '' === ( $post_rating = get_post_meta( $pid, POST_RATING, TRUE ) ) )
      $post_rating = 0;
   return $post_rating / $d;
}
В HTML-ы где отображается большое фото вставляем перед </head> (нужно вставить урл бога и var pid = ID поста):
<!-- yacc -->
<script src="http://YOUR_BLOG.com/wp-includes/js/jquery/jquery.js"></script>
<script>
   jQuery(document).ready( function yacc_ajax() {
      var pid =  ЗДЕСЬ_ДОЛЖЕН_БЫТЬ_ID_ПОСТА
      jQuery.ajax({
         type: 'POST',
         url: 'http://' + window.location.host + '/wp-admin/admin-ajax.php',
         data: { action: 'yacc_process', pid: pid }
      })
   })
</script>
<!-- end yacc -->>

Мои добавки и пояснения по 1-му коду(они уже в коде).
Строка .round(yacc_rating( $id ),3)
До этого была строка .yacc_rating( $id )
Округление до 3 цифр после запятой. Т.е. вместо 1,33333333 будет 1,333

Добавил (/gall/ заменить на нужное)
Код:
$url_no_count = '/gall/'; // не считать переходы с галерей на пост
$refurl=$_SERVER['HTTP_REFERER']; // реф для проверки предыд. переменной

и соотв.
Код:
|| (stripos($refurl,$url_no_count))>0)

Это фильтр подсчета постов (т.е. с урла в котором есть /gall/): переход с HTML поста на сам пост не засчитывается, т.к. юзер может кликать туда-сюда с целью выбора превью, и если эти просмотры поста считать, его ратио будет снижаться, что нелогично.
У меня урлы галь такие: хттп://domain.com/gall/name-gallery/01.html Т.е. вам для фильтра следует задать значение переменной $url_no_count соотв. вашим урлам.
цитата
20/03/12 в 00:14
 SMYK
Спасибо большое smail54.gif , будем пробовать....но выглядит смертельно icon_smile.gif
цитата
20/03/12 в 00:29
 photomuza
SMYK: Читай до Цитата:
Мои добавки и пояснения
smail101.gif
Всего 2 действия делаются один раз: 1 - вставить код в function.php и 2 - код в шаблоны HTML - всё. При создании галь только ID поста в HTML-ы заносить нужно.
цитата
21/03/12 в 21:01
 SMYK
Ne vyhodit alen`kij cvetochek)))
1. Vstavil bez izmeneniya pervyj kusok v function.php (pered zakryvauschim ?>)
2.Tag </head> u menya nahoditsya v header.php, dumau tut i problama.
Vstavlyau tuda takoj kod:
<!-- yacc -->
<script src="http://localhost/domain/wp-includes/js/jquery/jquery.js"></script>
<script>
jQuery(document).ready( function yacc_ajax() {
var pid = <?php print $post['guid'];?>
jQuery.ajax({
type: 'POST',
url: 'http://' + window.location.host + '/wp-admin/admin-ajax.php',
data: { action: 'yacc_process', pid: pid }
})
})
</script>
<!-- end yacc -->>

Vyletaet 404 vezde. Gde kosyaki? Podozrevau, chto ih nemalo(((
цитата
21/03/12 в 21:38
 photomuza
SMYK: 1-я часть верно, 2-ю часть не туда сунул icon_smile.gif Кто говорил про header.php?
Она для статичных (динамичных) HTML в которых открываются большие фото. Они не задействованы движком ВП, поэтому переменную var pid = нужно либо макросом задавать, либо своей функцией РНР, либо руками.

У тебя большие фото в чем открываются? Структура такая:

Вот в эти HTML-ы и суется 2-я часть.

Прицип-то в чем: подсчет сколько просмотров поста (гали т.е.) и сколько просмотров его HTML-ов (т.е. больших фото с этого поста) и далее выдача ратио - R = N-html / N-post
К примеру пост (галерея) открывалась 25 раз, а ее HTML-ы (в сумме) 220 раз, тогда R = (220 / 25) = 8,8
цитата
21/03/12 в 22:43
 SMYK
Или не догоныау или метод мне не подходит icon_smile.gif
У меныа нет картинок в хтмл. У меныа тубоваыа тема в которож все генеритсыа на лету. Ети галеры ц видео генерыатсыа на основе фаила single.php, которыж б своу очеред состоит из хеадера тела и футера. Хеадер ц тегом </хеад> - обсчиж длыа всех. Видимо придетсыа сделат новыж филе single.php в котором бы был свож статичныж хеадер?

Prochel i prifigel ot velikogo i moguchego icon_smile.gif
цитата
21/03/12 в 22:45
 SMYK
Кстати а с дизажном от такого счетчика что получитсыа? Он полносту копирует диз плагина, те все встанет в нужные места как там?
Стр. 1, 2  >  последняя »


Эта страница в полной версии