Используйте get_posts для custom_type в плагине WordPress

Я создаю плагин для обновления всех сообщений из пользовательского типа сразу.

У меня есть более 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.";
}

0

Решение

Во-первых, у вас есть numberpostsэто должно быть posts_per_page, поскольку get_posts использования WP_Query параметры для запроса.

И я думаю, что запрос будет выполняться быстрее, если вы установите его на 999 вместо -1. -1 занимает все сообщения, и если у вас более 1000 сообщений, это требует времени и ресурсов. Вы можете ограничить запрос, запрашивая только последние сообщения, или если у ваших мест есть дата истечения срока действия или что-то в этом роде, если вы отправляете те, срок действия которых истек, в черновик, вы, вероятно, могли бы запрашивать только опубликованные сообщения, которые затем будут < 999 постов (предположение).

Все это улучшит производительность запроса и предотвратит любой сбой.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]