Artur3194
@Artur3194

Длительное время выполнения функции get_posts()?

Доброго времени суток.
Выполнение get_posts() при ~ 2000 постах выполняется длительное время и часто выдает ошибку 500 на хостинге. Не вписываясь в php_memory_limit = 256 мб.
Пример кода:
$posts = get_posts( array(
            'numberposts' => -1,
            'orderby'     => 'date',
            'order'       => 'DESC',
            'post_type'   => 'post-item',
        ) );

На данный момент решил проблему увеличением php_memory_limit.
Но появилась идея запрашивать не все посты, а в зависимости от нужной категории. Все существующие ~ 2000 постов разделить на категории. Будет ли такая реализация работать быстрее?
$posts = get_posts( array(
            'numberposts' => -1,
            'orderby'     => 'date',
            'order'       => 'DESC',
            'category_name' => 'articles',
            'post_type'   => 'post-item',
        ) );

Либо есть какие-то другие идеи?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега WordPress
Python, JS, WordPress, SEO, Bots, Adversting
Но появилась идея запрашивать не все посты, а в зависимости от нужной категории. Все существующие ~ 2000 постов разделить на категории. Будет ли такая реализация работать быстрее?

Хорошая идея, конечно будет.
Либо есть какие-то другие идеи?

Не "либо", а "вместе" - почему бы не кэшировать выборку постов из БД (Transients API)?
$cache = get_transient('all_posts_cache');

if (!$cache) {
    $posts = get_posts([
        'numberposts' => -1,
        'orderby' => 'date',
        'order' => 'DESC',
        'post_type' => 'post-item',

        // Искать по слагу категории
        'category_name' => 'category_name',

        // Или искать по id категории
        // 'cat' => 123,

    ]);

    // Кэширование на 1 час
    set_transient('all_posts_cache', $posts, HOUR_IN_SECONDS);

}

else {
    $posts = $cache;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы