Intereting Posts
Создание короткого кода WordPress с переменной Использование WP Multisite для многоязычного сайта? Хороший вариант? Отключить вкладку HTML (текст) в редакторе сообщений Отображать запрос с несколькими типами сообщений и одинаковыми отношениями на одной странице Использование `auth_redirect`: продолжает просить меня войти в систему, даже когда я вошел в систему Использование магистрали с помощью API WordPress AJAX Как показать текущую категорию статьи с пользовательским интерфейсом CPT Настройка логотипа страницы WordPress Пользовательский тип сообщения – цикл в случайном порядке, но тот же самый 15, чтобы появиться первым … все еще случайным WordPress на локальной машине, перенаправляющей на онлайн-адрес Как создать различные шаблоны для разных страниц в WordPress Как направить мой сайт на правильный URL без панели инструментов Как отобразить пользовательскую панель ввода волшебного поля в теме WordPress? Проблемы с jQuery и is_admin () Пользовательский файл со специальным кодом виджета категории

Получение всех сообщений (200+) в категориях – проблемы с производительностью?

Я хочу получить идентификаторы 2 предыдущих и 2 следующих статей в определенной категории, чтобы показать их как список воспроизведения связанных видео. Я знаю, что есть функции previous_post_link и next_post_link , которые будут выполнять эту работу для меня, но я хочу больше, чем только next_post_link предыдущую и следующую ссылку.

Представьте себе следующий сценарий:

  • Сообщение № 001
  • Сообщение № 002
  • Сообщение № 003
  • Сообщение № 004
  • Сообщение № 005
  • Сообщение № 006

В поле Post # 001 я хочу отобразить # 002 и # 003. В сообщении # 003 я хочу отобразить # 001, # 002, # 004 и # 005.

 $post_id = $post->ID; // current post id $args = array('category' => $mycat, 'numberposts' => 200); $posts = get_posts($args); // get ids of posts retrieved from get_posts $ids = array(); foreach ($posts as $thepost) { $ids[] += $thepost->ID; } // get and echo previous and next post in the same category $thisindex = array_search($post->ID, $ids); $prevvid = $ids[$thisindex-2]; $previd = $ids[$thisindex-1]; $nextid = $ids[$thisindex+1]; $nexttid = $ids[$thisindex+2]; 

Я адаптировал и изменил этот код из WordPress Codex .

И теперь часть, которая меня беспокоит: если я не добавляю большое число в numberposts , она, конечно же, будет numberposts только стандартное количество сообщений, и поэтому мой код не будет работать так, как я этого хочу. У меня, вероятно, никогда не будет более 200 видеороликов в одной категории. Как вы думаете, мое решение – плохая идея относительно производительности? Я не нашел трюка в другом месте, чтобы показать соседние посты.

Заранее благодарю за любой совет!

Если вы хотите запросить большой набор сообщений, но не нуждаетесь в полной информации для каждого, вы можете использовать 'fields' => 'ids' m см. Параметр Return Fields .

В этом случае, я согласен с комментарием, может иметь смысл просто несколько раз получать смежные сообщения. Вам нужно будет использовать setup_postdata() и wp_reset_postdata() поскольку get_adjacent_post() не позволяет вам устанавливать пост явно. К сожалению, эта функция не слишком дружелюбна для повторного использования или использования SQL, который она генерирует.

Используйте «смещение» в своем запросе, чтобы начать два сообщения до текущего. Поэтому, если вы повторяете сообщения, а текущая должность – номер 14, затем смещение на 12 и запрос на 5 сообщений. Это даст вам номера 12-16, которые вам нужны, и ничего больше.

 $args = array( 'category' => $mycat, 'numberposts' => 5, 'offset' => 12, ); $posts = get_posts( $args );