Почему более 10 статей в WP_Query приводят к отбрасыванию некоторых выходов?

Я не хочу иметь идентификаторы изображений в исходном коде сообщений, поэтому я их the_content с the_content фильтра the_content – вспомогательной функции, которая выполняет запрос, как the_content ниже. Он отлично работает, когда я получаю до 10 или 11 идентификаторов, а если есть больше идентификаторов, они не будут отображаться в результате запроса. Запрос партиями из 10 работ, но он намного длиннее (около 30 секунд для 700 изображений!). Если я увеличиваю размер партии, не изменяя ничего в моей функции, база данных начинает отбрасывать некоторые результаты.

Есть ли причина для этого? Что я делаю не так?

У меня есть только пара недель опыта программирования php / WP, пожалуйста, не судите код слишком жестко.

Запрос основан на этом ответе . Пример (очень wp_attachment_metadata ) структура wp_attachment_metadata , которая делает LIKE неизбежной, здесь .

 /* get images metas given their names and folders */ function get_images_meta_id( $filenames ) { error_log( 'metas started ' ); $an_upload_dir = trailingslashit(wp_upload_dir()['url']); $an_upload_dir_len = strlen($an_upload_dir); $filenames_as_params = array(); sort($filenames); $prev_fn = ''; foreach ( $filenames as $fn ) { if ((strpos($fn, $an_upload_dir) !== 0) or ($fn === $prev_fn)) { continue; } $prev_fn = $fn; array_push($filenames_as_params, array( 'value' => '"' . substr($fn, $an_upload_dir_len) . '"', 'compare' => 'LIKE', 'key' => '_wp_attachment_metadata', )); } $metas = array(); $counter = 0; while($counter < count($filenames_as_params)) { $meta_query_array = array_slice($filenames_as_params, $counter, 10); $counter += 10; $meta_query_array['relation'] = 'OR'; $query_args = array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'fields' => 'ids', 'meta_query' => $meta_query_array ); $query = new WP_Query( $query_args ); if ( $query->have_posts() ) { foreach ( $query->posts as $post_id ) { $meta = wp_get_attachment_metadata( $post_id ); $meta['attachment_id'] = $post_id; $metas[$meta['file']] = $meta; } } } error_log( 'metas done ' ); return $metas; } 

Solutions Collecting From Web of "Почему более 10 статей в WP_Query приводят к отбрасыванию некоторых выходов?"

Он возвращает 10, потому что обычно это значение по умолчанию указано в настройках вашего сайта «чтение» (IIRC) и явно используется явно для wp_query интерфейса, но также по умолчанию для количества сообщений, возвращаемых wp_query . То, что вы ищете, – это аргумент number_of_posts (не верьте мне, проверьте docs) для запроса.

Кроме того, не уверен, что вы пытаетесь сделать, но использование LIKE сделает ваши запросы медленными. Независимо от того, что вы пытаетесь сделать, должен быть лучший способ (если этот код не будет работать только один раз, а затем, возможно, производительность не является проблемой)