Используя 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/