#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
файл с сервера.