Intereting Posts
Как получить значение meta на основе последнего идентификатора сообщения с именем группы по названию Сортировка столбцов с псевдонимами Показать последние сообщения x из всех категорий в Custom Post Type / Taxonomy Несколько таблиц wp_options для совместного использования контента через установки Обмен пользователями по нескольким сайтам, каждый из которых находится в собственной базе данных Исключить все липкие сообщения на первой странице двадцать двенадцать Уменьшите количество SQL-запросов внутри цикла WP_Query для извлечения данных автора Изменение аргументов состояния сообщения Количество сообщений в столбцах перед тегом, для каждого тега jQuery AJAX добавить json2 зависимость? Страница частично кэширования с супер кешем Плагин, где вы можете сделать запрос для события, созданного другим пользователем WP_Query пропускает абсурдные объемы памяти Twitter удаляет веб-сайт Не удается получить фильтр wp_title, работающий в двадцать шестнадцати детской теме

Отслеживание пользователей для пользовательского типа сообщения «Урок». Запросы базы данных и производительность

Поэтому я написал этот небольшой фрагмент кода, чтобы добавить идентификатор сообщения вместе с идентификатором текущего пользователя в мета-таблицу пользователя. Я буду использовать это, чтобы показать записи «урока», которые пользователь просмотрел с ними.

Моя единственная забота в этом способе сделать это так, так это то, что, кажется, WordPress придется перебирать всю эту таблицу для получения этих сообщений. Что, если есть десятки тысяч пользователей (я оптимистичен), и все они видят в среднем 10 или 20 уроков? Может ли это вызвать проблемы с производительностью? Я недостаточно знаю о базах данных, которые еще нужно знать. Может быть, лучший способ сделать это, что мне не хватает?

<?php if ( is_user_logged_in() ) { $user_ID = get_current_user_id(); $post_ID = get_the_ID(); add_user_meta( $user_ID, 'viewed_lesson_tracking', $post_ID ); // tracks that user has viewed the current post } ?> 

Спасибо за вашу помощь!

Поскольку на пользователя будет более одного сообщения (урока), ваш код будет более похожим на это:

 <?php if ( is_user_logged_in() ) { $user_ID = get_current_user_id(); $post_ID = get_the_ID(); $viewed = get_user_meta( $user_ID, 'viewed_lesson_tracking', true); if(empty($viewed)){ $viewed = array(); } $viewed[] = $post_ID add_user_meta( $user_ID, 'viewed_lesson_tracking', $viewed ); // tracks that user has viewed the current post } ?> 

Итак, все, что вам нужно сделать, при отображении списка всех просмотренных уроков (сообщений) – использовать параметр post__in WP_Query.

WordPress не будет перебирать всю таблицу. Это не то, как работают запросы MySQL. В любой момент времени для каждого пользователя будет только один запрос. Вам не нужно беспокоиться о производительности. Кроме того, WordPress кэширует все запросы, и если у вас есть кэш-плагин поверх него, вам не нужно даже думать об этом.