С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 13/03/12 в 11:44 |
День добрый. Кто-то уже делал наверное подобное.
Запускаю сайт и уж очень некрасиво нули везде смотрятся, а самому кликать или софт юзать сторонний неохота. Есть ли возможность как-то рэндомно повысить везде кол-во просмотров в разумных пределах. Скажем везде подставить числа в диапазоне 50-1300....например. Заранее спасибо за конкретику.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 13/03/12 в 12:25 |
Добавить в конец 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 раз(а)
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 13/03/12 в 14:41 |
Для тебя мне ничего не жалко (+4), но первый блин оказался комом Никаких изменений ни в старых ни в добавленных постах не произошло
Тема, кстати, FreeWPTube4...возможно это имеет значение
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 13/03/12 в 15:47 |
А так?
Если не работает, значит поле называется по-другому (не views, как в коде выше).
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 13/03/12 в 20:45 |
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.
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 14/03/12 в 03:03 |
Дык плагин для того, чтобы более популярные посты выводить в топ. А так - в чем смысел-то? Наберут просмотров, тогда и поставить в виджет, а пока не набрали, я бы просто виджет не включал, но счетчик считал бы. Как-то так.
А руками можно так:
ВВЕРХУ
НИЖЕ
Т.е. число в поле Value меняешь и обновляешь пост.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 14/03/12 в 03:57 |
Цитата: | esli imelos` vvidu vse-taki pole, a ne peremennaya, to tam s etim esche slozhnee. |
Да, именно название поля (см. картинку выше).
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 14/03/12 в 04:19 |
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 14/03/12 в 04:21 |
Yacc писал: | Да, именно название поля (см. картинку выше). |
Ну наконец-то разобрался))) Но...теперь уж точно понятно, что название поля у тебя правильное и код не срабатывает...уж не знаю по какой причине)
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 14/03/12 в 13:56 |
Я попробовал (обнулил перед этим счетчик), работает.
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 14/03/12 в 14:25 |
SMYK писал: | присваивать новому посту определенное рэндомное кол-во просмотров...которое бы потом есст-ным путем увеличивалось. |
Мысль верная, я ее почти реализовал с помощью нашего Yacc-а, но более хитро. Годится для постов, которые являются своими галереями, причем большие фото открываются в HTML-ах.
Идея такая:
а) считаются просмотры каждого поста (гали)
б) считаются просмотры HTML-ов каждого поста
в) функция вычисляет ратио: N-html / N-post
г) именно это ратио и выдается в рейтинг
Таким образом, популярным считается не пост с бОльшим числом просмотров (потому что вверху, либо потому что до фига набрал, либо потому что тумба удачная), а с бОльшим количеством просмотров больших фото - относительно открытия самого поста. Причем я добавил в код стоку, чтобы переход с HTML на ее же галю не считался, т.к. юзер может переходить туда и обратно для выбора большого фото, а не листая подряд HTML-ы, и без этой строки ратио будет снижаться, а это нелогично.
При таком алгоритме, совершенно не важно, старый пост или новый и сколько у него общее просмотров. Популярные всегда будет лезть в топ, непопулярные - вниз. Все эволюционирует естественным образом без всяких звездочек с оценками - ИМХО менее адекватный показатель, к тому же БД больше забивает (IP писать надо).
В общем, работает, если интересно, могу сюда код дать. У меня пока не получилось реализовать до рабочего состояния, т.к. HTML-ы генерит скрипт и нужно чтобы туда вставлялось автоматом ID поста. Если руками вставить, работает.
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 14/03/12 в 14:36 |
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 15/03/12 в 15:48 |
photomuza писал: | В общем, работает, если интересно, могу сюда код дать. У меня пока не получилось реализовать до рабочего состояния, т.к. HTML-ы генерит скрипт и нужно чтобы туда вставлялось автоматом ID поста. Если руками вставить, работает. |
Ну звучит ооочень занятно. Если вариант рабочий, то, конечно интересно взглянуть.
PS. Спасибо участникам...благодаря вам топик реально стал полезным и интересным.
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 15/03/12 в 16:26 |
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
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 15/03/12 в 16:34 |
DELETE
|
|
|
|
+ + +
С нами с 10.03.12
Сообщения: 6
Рейтинг: 2
|
Добавлено: 16/03/12 в 13:20 |
А что у вас с посещаемостью?
Не будет это выглядеть не логично, когда просмотров за 200, а посещалка 2-5 в сутки?
Может не стоит заморачиваться над начальным имиджем с помощью, если так можно назвать, накрутки, а лучше порботать над контентом и создать имидж своими руками?
|
|
|
|
С нами с 11.10.05
Сообщения: 773
Рейтинг: 501
|
Добавлено: 16/03/12 в 13:33 |
И кто об этом узнает?
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 16/03/12 в 17:10 |
SMYK писал: | Правда и обнуление счетчика я найти не могу. |
Заходишь в phpMyAdmin, нажимаешь SQL, вставляешь строку:
DELETE FROM wp_postmeta WHERE meta_key = 'views';
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 16/03/12 в 17:48 |
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; // Исключить ботов, роботов, пауков и прочую нечесть ? 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 соотв. вашим урлам.
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 20/03/12 в 00:14 |
Спасибо большое , будем пробовать....но выглядит смертельно
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 20/03/12 в 00:29 |
SMYK: Читай до Цитата: | Мои добавки и пояснения |
Всего 2 действия делаются один раз: 1 - вставить код в function.php и 2 - код в шаблоны HTML - всё. При создании галь только ID поста в HTML-ы заносить нужно.
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 21/03/12 в 21:01 |
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(((
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 21/03/12 в 21:38 |
SMYK: 1-я часть верно, 2-ю часть не туда сунул Кто говорил про header.php?
Она для статичных (динамичных) HTML в которых открываются большие фото. Они не задействованы движком ВП, поэтому переменную var pid = нужно либо макросом задавать, либо своей функцией РНР, либо руками.
У тебя большие фото в чем открываются? Структура такая:
Вот в эти HTML-ы и суется 2-я часть.
Прицип-то в чем: подсчет сколько просмотров поста (гали т.е.) и сколько просмотров его HTML-ов (т.е. больших фото с этого поста) и далее выдача ратио - R = N-html / N-post
К примеру пост (галерея) открывалась 25 раз, а ее HTML-ы (в сумме) 220 раз, тогда R = (220 / 25) = 8,8
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 21/03/12 в 22:43 |
Или не догоныау или метод мне не подходит
У меныа нет картинок в хтмл. У меныа тубоваыа тема в которож все генеритсыа на лету. Ети галеры ц видео генерыатсыа на основе фаила single.php, которыж б своу очеред состоит из хеадера тела и футера. Хеадер ц тегом </хеад> - обсчиж длыа всех. Видимо придетсыа сделат новыж филе single.php в котором бы был свож статичныж хеадер?
Prochel i prifigel ot velikogo i moguchego
|
|
|
|
С нами с 07.06.08
Сообщения: 778
Рейтинг: 395
|
Добавлено: 21/03/12 в 22:45 |
Кстати а с дизажном от такого счетчика что получитсыа? Он полносту копирует диз плагина, те все встанет в нужные места как там?
|
|
|
|