[В РАЗРАБОТКЕ] Вывод популярных категорий таксономии / Популярные элементы таксономии (термины)
Есть плагины для вывода популярных постов.
Ищу аналог только для кастомной 1 таксономии, чтобы выводились популярные дочерние таксономии.
Есть плагины для вывода популярных постов.
Ищу аналог только для кастомной 1 таксономии, чтобы выводились популярные дочерние таксономии.
Что значит "популярная дочерняя таксономия"? (решение зависит от того, что Вы понимаете под этим определением)
я имею ввиду что создал таксономию "Средства передвижения" и у неё есть дочки Автомобили, Мотоциклы, самолеты, Сани, повозки, велосипеды, автобусы и тд более 30 видов.
Нужно вывести самые популярные\просматриваемые за время "средства передвижения" (10шт) - к примеру сейчас это
Автомобили, мотоциклы, Самолеты
Сани, повозки, дельтапланы
Я даже не знаю существуют ли такие плагины.
Теоретически я понимаю что плагин нужно строить опираясь на просмотры записей и рубрик, и суммировать результаты в базу данных, а потом кроном это чистить.
Но пока что ищу готовое решение
Чисто суммирование просмотра таксономий (и крон очистка), создать не составит труда. Но люди не часто смотрят рубрики. По-этому этот вариант отставлю как запасной.
Kama Postviews считает просмотры терминов. В принципе с его помощью без проблем можно вывести популярные термины указанной таксономии. Правда платный он
пока что сделал тестовую версию для админа (себя ))
/* Script: Popular term By: Kolshix Заметка: 1. кукисы не добавлял, пусть и пагинация считается, если term популярен то и пагинацию нужно считать. 2. стили так же не добавлял Не доделал: 1. cron отчистку таблицы populartermsdata 2. не определился с подсчетом постов за все время - сейчас обнуляется думаю добавить столбец в "wp_populartermsdata" - пусть все там обнуляется, а в termmeta будет подсчет за все время 3. не подключена возможность выбора нужного элемента таксономии для вывода 4. не подключена отчистка данных из таблицы при удаление термина */ /**** Таблица для подсчета популярных term "за день" */ function create_table() { global $wpdb; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $table_name = $wpdb->get_blog_prefix() . 'populartermsdata'; $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate}"; // // название - тип(количество символов) - не использовать отрицательные числа $sql = "CREATE TABLE {$table_name} ( termid bigint(20) unsigned NOT NULL auto_increment, termviews bigint(20) NOT NULL default '1', PRIMARY KEY (termid) ) {$charset_collate};"; dbDelta($sql); } // create_table(); // нужно раскомментировать /* Создание таблицы - чтоб не засирать termmeta * таблица нужна чтоб не выводить много обновлений за короткий промежуток времени * пытался повторить рейтинг (обновлять поле при наличии числа 10-20-30... просмотров) * из плагина wordpress popular post * буду юзать пример отсюда ==> https://wp-kama.ru/id_101/funktsiya-vyivoda-zapisey-po-kolichestvu-prosmotrov.html */ /**** Подсчет количества посещений страниц term */ /* Это старый код от KAMA - новый тут https://wp-kama.ru/id_55/schitaem-kolichestvo-posescheniy-stranits-na-wordpress.html */ add_action('wp_head', 'kolshix_catviews'); function kolshix_catviews() { $meta_key = 'views_cat'; // Ключ мета поля, куда будет записываться количество просмотров. $who_count = 0; // Чьи посещения считать? 0 - Всех. 1 - Только гостей. 2 - Только зарегистрированных пользователей. $exclude_bots = 1; // Исключить ботов, роботов, пауков и прочую нечесть :)? 0 - нет, пусть тоже считаются. 1 - да, исключить из подсчета. $term_view = 'post_character'; // что считаем - настраиваем под себя if ( current_user_can('manage_options')) { if ( is_tax( $term_view ) ) { global $user_ID, $wp_query, $wpdb; $cat_obj = $wp_query->get_queried_object(); $cat_id = $cat_obj->term_id; $id = (int)$cat_id; static $cat_views = false; if($cat_views) return true; // чтобы 1 раз за поток $cat_views = (int)get_term_meta( $id, $meta_key, true ); $should_count = false; switch( (int)$who_count ) { case 0: if( (int)$user_ID == 1 ) /* АДМИНа считать */ $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) ) $should_count = false; } if($should_count){ // Рейтинг обновления вывода дневных постов выстовляется тут - сейчас обновления после 10 просмотров if ( $cat_views+1 > 10 ){ // rate update_term_meta($id, $meta_key, 1 ); $old_tv = $wpdb->get_results( "SELECT termid, termviews FROM wp_populartermsdata WHERE termid = $id " ); if( !isset($old_tv[0]->termviews) ) { $wpdb->insert( 'wp_populartermsdata', array( 'termid' => $id, 'termviews' => 1 ), array( '%d', '%d' ) ); $wpdb->update( 'wp_populartermsdata', array( 'termviews' => 1 ), array( 'termid' => $id ) ); } else { $wpdb->update( 'wp_populartermsdata', array( 'termviews' => $old_tv[0]->termviews+1 ), array( 'termid' => $id ) ); } } else { if( !update_term_meta($id, $meta_key, ($cat_views+1)) ){ add_term_meta($id, $meta_key, 1, true); } } } return true; } // end tax } } /**** Вывод популярных term */ function kolshix_get_most_viewed_tax( $args = '' ){ global $wpdb, $post; parse_str( $args, $i ); $num = isset( $i['num'] ) ? preg_replace( '/[^0-9,\s]/', '', $i['num'] ) : 10; // 20,10 | 10 $out_before = isset( $i['out_before'] ) ? $i['out_before'] : ''; $out_after = isset( $i['out_after'] ) ? $i['out_after'] : ''; $pop_tax = $wpdb->get_results($wpdb->prepare("SELECT meta_value, term_id FROM wp_termmeta WHERE meta_key = 'views_cat' ORDER BY meta_value LIMIT $num")); foreach( $pop_tax as $tax ){ // $term = get_term( $tax->term_id, 'post_character' ); // из wp_termmeta $term = get_term( $tax->termid, 'post_character' ); // из цз_populartermsdata // $slug = $term->slug; // $name = $term->name; $pop_out .= $term->name . '<br>'; } // simple kolshix_get_most_viewed_tax( 'num=3&out_before=<span>&out_after=</span>' ); return $out_before. $pop_out . $out_after ; }