Я создаю плагин для обновления всех сообщений из пользовательского типа сразу.
У меня есть более 20K списков событий и 1000 мест. Место размещения выбирается в сообщении листинга при его создании, и некоторая информация копируется в список, но если вы измените место проведения после этого, листинг необходимо обновить вручную. (Я не создавал эту систему, но пытался улучшить.)
На новой странице администратора, которую я создал, вы нажимаете кнопку, она обновляет и запускает функцию PHP на GET. Эта часть работает, функция срабатывает. Но очевидно, что функция get_posts, которую я использую, вызывает ее аварийное завершение.
function ac_update_listings() {
global $post;
$my_posts = get_posts( array(
'post_type' => 'listing',
'post_status' => 'any',
'numberposts' => -1
) );
foreach ( $my_posts as $my_post ):
$post_id = $my_post['ID'];
echo $post_id;//Get Venue ID
$thevenue = get_post_meta($post_id, 'thevenue', true);
//Get Venue info
$block = get_post_meta($thevenue, 'block', true);
$street = get_post_meta($thevenue, 'street', true);
$number = get_post_meta($thevenue, 'number', true);// Update Data
update_post_meta($post_id, 'block', $block);
update_post_meta($post_id, 'street', $street);
update_post_meta($post_id, 'number', $number);
endforeach;
echo "Listings are now updated.";
}
Во-первых, у вас есть numberposts
это должно быть posts_per_page
, поскольку get_posts
использования WP_Query
параметры для запроса.
И я думаю, что запрос будет выполняться быстрее, если вы установите его на 999 вместо -1. -1 занимает все сообщения, и если у вас более 1000 сообщений, это требует времени и ресурсов. Вы можете ограничить запрос, запрашивая только последние сообщения, или если у ваших мест есть дата истечения срока действия или что-то в этом роде, если вы отправляете те, срок действия которых истек, в черновик, вы, вероятно, могли бы запрашивать только опубликованные сообщения, которые затем будут < 999 постов (предположение).
Все это улучшит производительность запроса и предотвратит любой сбой.
Других решений пока нет …