@AlexRas

Тормозит wordpress. Какая может быть ошибка в этом коде?

Здравствуйте, тормозит вордпрес при загрузке постов.

Выяснил что вот этот участок кода медленно обрабатывается:
$featured_works = get_posts( array(
	'posts_per_page' => -1,
	'meta_key' => '_featured',
	'meta_value' => 1,
	'post_type' => 'work'
) );

Если его изменить, то тормоза пропадают:
$featured_works = array() ;

Подскажите куда дальше копать, с wordpress вообще не знаком.
  • Вопрос задан
  • 391 просмотр
Решения вопроса 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Какое количество записей в базе в таблице wp_posts?
2. Какое количество записей типа "work"?
3. Мета-поле "featured" всегда имеет значение (1 или другое), или пишется только для тех записей, которые реально featured?

Как написал Vitaliy Orlov, вероятно идет выборка большого количества постов из-за аргумента 'posts_per_page' => -1, (все посты, неограниченное количество). Самый простой вариант - ограничить тем количеством, которое реально требуется на выводе, скажем, штук 5 'posts_per_page' => 5,. А еще не мешало бы подправить meta_query:
$featured_works = get_posts( array(
  'post_type' => 'work'  
  'posts_per_page' => 5,
  'meta_key' => '_featured',
  'meta_value_num' => 1,
) );

meta_value_num быстрее meta_value. А еще можно почистить базу от ревизий.
Ответ написан
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
возможно, у тебя идет выборка большого кол-ва постов, попробуй ограничить тут:
posts_per_page
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ch33ch
Здравствуйте, у меня та же самая проблема, тормозит вот этот запрос в woocommerce:
SELECT wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.ID = mt1.post_id )
INNER JOIN wp_postmeta AS mt2
ON ( wp_posts.ID = mt2.post_id )
WHERE 1=1
AND wp_posts.post_parent = 0
AND ( ( wp_postmeta.meta_key = '_visibility'
AND wp_postmeta.meta_value IN ('visible','catalog') )
AND ( mt1.meta_key = '_price'
AND CAST(mt1.meta_value AS DECIMAL) > '0' )
AND ( mt2.meta_key = '_stock_status'
AND mt2.meta_value = 'instock' ) )
AND wp_posts.post_type = 'product'
AND ((wp_posts.post_status = 'publish'))
GROUP BY wp_posts.ID
ORDER BY RAND()
LIMIT 0, 5
Подскажите где и как его уменьшить?
Ответ написан
@max3wq
Очень хороший метод узнать что грузит - использовать бесплатный плагин query-monitor. Он вам покажет какой файл шаблона и какая функция генерит долгое время загрузки. Медленные запросы к БД, скрипты и многое другое.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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