Повышение производительности запросов в WordPress путем удаления post__not_in

Используя post__not_in в запросах, вы делаете работу внутреннего кеша практически бесполезной, особенно, когда список исключений является большим, это очень замедляет сам запрос и, как следствие, работу сайта в целом.

Вместо такого кода, например:

$array_of_post_ids_to_skip = array(
    1,
    7,
    29,
);
$limit = 16;
$other_posts_in_tag = get_posts( array(
    'tag_id'           => $tag_id,
    'posts_per_page'   => $limit,
    'post__not_in'     => $array_of_post_ids_to_skip,
    'suppress_filters' => false,
));
 
foreach ( $other_posts_in_tag as $post ){
    // здесь сама логика;
}

Можно сделать такой хак — взять постов больше на размер массива $array_of_post_ids_to_skip и потом уже в цикле на PHP отбросить исключаемые посты:

$array_of_post_ids_to_skip = array(
    1,
    7,
    29,
);
$limit = 16;
$other_posts_in_tag = get_posts( array(
    'tag_id'           =>  $tag_id,
    'posts_per_page'   => $limit + count( $array_of_post_ids_to_skip ),
    'suppress_filters' => false,
));
 
foreach ( $other_posts_in_tag as $post ){
    if ( in_array( $post, $array_of_post_ids_to_skip ) ){
        continue;
    }
    // здесь сама логика;
}

Ссылки

Источник: https://www.kobzarev.com/wordpress/removing-post-not-in/

Михаил Кобзарёв

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все. Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса. Ведет блог о разработке, дайджест в телеграмме и в ВК. Любит сиськи, баню и радиоэлектронику. 100% патриот (но это не точно). Тролль 542 уровня. Ездит в отпуск раз в 5 лет.

Добавить комментарий

%d такие блоггеры, как: