Intereting Posts
Показать другую ссылку на основе IP Добавить в permalink rss Как переместить родительский li в конец дочернего ul Изменение таксономических страниц для исключения элементов в таксономиях детей Как использовать аутентификацию вне WordPress? Как интегрировать карусель совы в тему без использования плагина? Как определить количество виджетов, содержащихся на боковой панели, с помощью настраиваемого JS Неопределенный индекс: проблема с плагином действий Найти / установить последнюю версию wordpress db из нескольких копий базы данных Отсутствует параметр боковой панели "fix" – before_content Возврат wp_post-> post_parent 0 date () возвращает неверное значение, если используется из темы WordPress, но исправляет в противном случае Отображать сообщение, если сообщения не существуют в цикле Убедитесь, что два разных сайта WordPress имеют автоматический вход в систему Как ограничить страницы, отображаемые в диспетчере страниц, теми, которые созданы зарегистрированным пользователем?

Показывать индивидуальный рейтинг автора из запроса совокупного количества просмотров просмотров для всех авторов

Я изначально собирался задать вопрос о том, как я буду оценивать список авторов по количеству просмотров сообщений со всех своих сообщений в сочетании. Но я, к счастью, нашел решение здесь: Список пользователей с наибольшим количеством просмотров сообщений

Это код, который я использую с этой страницы, за исключением того, что я немного изменил его, чтобы получить сообщения о просмотрах из подключаемого модуля:

<?php global $wpdb; $topuser = array(); // query all posts by each user $users = $wpdb->get_results("SELECT ID FROM $wpdb->users ORDER BY ID"); foreach ( $users as $user ) { $query = get_posts( array('author' => $user->ID, 'posts_per_page' => '10000000000')); $counter = 0; // get each post of a user foreach ( $query as $post ){ $views = absint( get_post_views('normal') ); $counter += $views; } $topuser[] = array( 'id' => $user->ID, 'views' => $counter); wp_reset_query(); } // function to sort array based on views count function sortViews($a, $b) { return $b['views'] - $a['views']; } usort($topuser, 'sortViews'); // sort the array $output = array_slice($topuser, 0, 10); // slice the array by limit 3 // output the result: user, total postview count, latest post foreach ($output as $user){ $profile = get_userdata($user['id']); $query = get_posts( array('author' => $user['id'], 'numberposts' => 1 )); echo '<p>' . $profile->user_nicename .' ('. $user['views'] .')</p>'; foreach ( $query as $post ){ echo '<a href="' . $post->post_name . '">' . $post->post_title . '</a>'; echo get_post_meta($post->ID, get_post_views('normal'), true); } } ?> 

Теперь я хотел бы сделать это решение еще одним шагом к моему видению, когда впервые придумаю эту идею.

Я хочу показать конкретный рейтинг (позицию в списке) каждого пользователя на странице своего профиля. Я бы вставлял этот код в member-header.php

Пример. Он сказал бы что-то вроде «User Rank: 15», что означает, что этот пользователь появляется в качестве 15-го результата при выполнении вышеуказанного запроса (конечно, я бы изменил число от 10 до более, и именно поэтому это было бы возможно).

Надеюсь, вы, ребята, можете помочь. Заранее спасибо 🙂

Сначала вы можете заменить

 'posts_per_page' => '10000000000' 

с

 'posts_per_page' => -1 

чтобы удалить предел.

Если вы хотите показать ранг пользователя, вы можете добавить счетчик $rank в цикле foreach:

 $rank=0; // output the result: user, total postview count, latest post foreach ($output as $user){ $rank++; $profile = get_userdata($user['id']); $query = get_posts( array('author' => $user['id'], 'numberposts' => 1 )); // update the rank for each user update_user_meta( $user['id'], 'user_rank', $rank ); echo '<div class="user-item">'; echo '<p>' . $profile->user_nicename .' ('. $user['views'] .') [User Rank: '.$rank.']</p>'; foreach ( $query as $post ){ echo '<a href="' . $post->post_name . '">' . $post->post_title . '</a>'; echo get_post_meta($post->ID, get_post_views('normal'), true); } echo '</div>'; } 

Обновить:

Вычисление ранга для всех пользователей может быть заданием для службы cron, например:

  1. сор-хрон,
  2. linux cron,
  3. внешняя служба cron
  4. изготовленный под заказ cron.

Вот только одна идея для частей 2 и 3:

  1. Создайте файл mycron.php
  2. Добавьте две строки кода в верхней части файла отсюда: http://codex.wordpress.org/Integrating_WordPress_with_Your_Website
  3. Добавьте свой код в mycron.php
  4. Увеличьте предел array_slice (в настоящее время он установлен только в 10)
  5. Запустите mycron.php чтобы проверить его
  6. Добавьте mycron.php в службу cron (например, ежедневно)
  7. Добавьте измерения времени / памяти в mycron.php
  8. Если это становится слишком тяжелым, попробуйте разделить его на другие cronjob (возможно, 500 пользователей за крону)
  9. Есть большая чашка кофе 😉

ps: не забудьте сделать резервную копию своей базы данных.

Обновление 2:

Вот пример вашего файла mycron.php , если вы хотите попробовать его в своей корневой папке WordPress:

 <?php define('WP_USE_THEMES', false); require('./wp-blog-header.php'); global $wpdb; $topuser = array(); $html = ""; // query all posts by each user $users = $wpdb->get_results("SELECT ID FROM $wpdb->users ORDER BY ID"); foreach ( $users as $user ) { $query = get_posts( array('author' => $user->ID, 'posts_per_page' => -1)); $counter = 0; // get each post of a user foreach ( $query as $post ){ $views = absint( get_post_views('normal') ); $counter += $views; } $topuser[] = array( 'id' => $user->ID, 'views' => $counter); } // function to sort array based on views count function sortViews($a, $b) { return $b['views'] - $a['views']; } usort($topuser, 'sortViews'); // sort the array // output the result: user, total postview count, latest post foreach ($topuser as $user){ $rank++; $profile = get_userdata($user['id']); $query = get_posts( array('author' => $user['id'], 'numberposts' => 1 )); // update the rank for each user update_user_meta( $user['id'], 'user_rank', $rank ); $html .= '<div class="user-item">'; $html .= '<p>' . $profile->user_nicename .' ('. $user['views'] .') [User Rank: '.$rank.']</p>'; foreach ( $query as $post ){ $html .= '<a href="' . $post->post_name . '">' . $post->post_title . '</a>'; $html .= get_post_meta($post->ID, get_post_views('normal'), true); } $html .= '</div>'; } echo $html; printf(" Perfomance: %s queries in %s seconds ", get_num_queries(), timer_stop(0)); echo (file_put_contents("/path/to/ranks.html", $html)>0)? "Success!":"Problem writing to file!";