Массовая публикация черновиков страниц WordPress

#wordpress #custom-wordpress-pages

#wordpress #пользовательские-wordpress-страницы

Вопрос:

Я работаю над сайтом, на котором я создал 100 тысяч страниц WordPress с помощью плагина WP CSV. Однако около 60 тыс. страниц были сохранены в черновике.

Как я могу опубликовать эти страницы массово?

Если я попытаюсь изменить ‘post_status’ непосредственно из базы данных, постоянная ссылка на страницу останется пустой и перенаправит на домашнюю страницу.

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

Есть ли какое-либо оптимизированное решение для этого?

Комментарии:

1. Проверьте это: wordpress.stackexchange.com/questions/12512 /…

2. да, но это просто обновляет ‘post_status’, что приводит к публикации сообщения, но постоянная ссылка остается пустой. Мне нужно вызвать соответствующую функцию публикации WordPress. в этом случае также будет сгенерирована постоянная ссылка на страницу.

3. Вы можете передать slug в качестве аргумента wp_update_post . Вы можете создать заготовку на основе заголовка. developer.wordpress.org/reference/functions/wp_update_post

Ответ №1:

В случае, если у вас нет доступа к оболочке (SSH) к вашему хосту и вы не можете дополнительно увеличить max_execution_time для PHP, вы можете сделать следующее. Создайте PHP-файл, например, bulk_publish.php в вашем корневом каталоге WP, содержащий следующий код:

 <?php

require_once('./wp-load.php');

$post_type = 'page'; // Change, if you need to handle another post type
$posts_per_page = 400; // if this is too much, reduce it

$posts = get_posts([
  'post_type' => $post_type,
  'posts_per_page' => $posts_per_page,
  'post_status' => ['draft'],
  'lang' => '',
]);

if (count($posts) > 0) {
  foreach ($posts as $post) {
    wp_update_post([
      'ID' => $post->ID,
      'post_status' => 'publish',
    ]);
  }
  wp_redirect('/bulk_publish.php');
} else {
  echo "Done.";
}
  

Это позволит публиковать $posts_per_page страницы за раз, повторяя draft сообщения о статусе, а затем перенаправлять обратно на bulk_publish.php . Это позволит вам избежать попадания на max_execution_time . Вы можете поэкспериментировать с увеличением этого числа. Если вам нужно обработать 60 тысяч страниц, ваш браузер в какой-то момент пожалуется на слишком много перенаправлений. В этом случае просто обновите один раз, чтобы позволить ему выполнить следующие пару итераций, пока он снова не пожалуется. Как только выводится «Готово», все готово.

После этого удалите bulk_publish.php файл с сервера.