Как принудительно обновить все записи после импорта
Недавно я импортировал большое количество пользовательских записей в WordPress. Всё работает нормально, за исключением одной таксономии, которая импортирована, но не отображается на фронтенде до тех пор, пока я не нажму кнопку "Обновить" для каждой записи. У меня 810 записей, и это не решение...
Я думаю, должен быть способ выполнить MySQL команду, чтобы принудительно обновить все записи без внесения каких-либо изменений. Пожалуйста, помогите мне с командой, я искал плагины и не могу найти ничего подходящего
Спасибо
Есть 2 способа, как это можно сделать. Первый и более сложный — написать программу, другой — выполнить массовое обновление. Зачем усложнять, если простой способ работает так же хорошо? Особенно учитывая, что это разовая задача.
Простой способ:
- В админ-панели выберите список всех записей вашего пользовательского типа
- Выделите все записи (поставьте галочки) — вы можете увидеть больше записей, нажав «Настройки экрана» в правом верхнем углу и увеличив количество элементов на странице
- Нажмите на стрелку вниз рядом с «Групповые действия» и выберите «Изменить»
- Нажмите «Применить» — откроется экран с выбором изменений, которые можно внести
- Внесите какое-нибудь изменение, например добавьте тег или измените автора (что угодно)
- Нажмите «Обновить»
Этого должно быть достаточно.
«Сложный» способ:
На случай, если кто-то захочет использовать программное решение, вы можете добавить приведенный ниже код в файл functions.php вашей дочерней темы.
function my_update_posts() {
//$myposts = get_posts('showposts=-1'); // Получить записи, которые вы хотите обновить
$args = array(
'post_type' => 'post',
'numberposts' => -1
);
$myposts = get_posts($args);
foreach ($myposts as $mypost){
$mypost->post_title = $mypost->post_title.'';
wp_update_post( $mypost );
}
}
add_action( 'wp_loaded', 'my_update_posts' );
Не забудьте запустить этот код только один раз, а затем удалите его или закомментируйте строку add_action, иначе он будет выполняться каждый раз при загрузке новой страницы.
Я добавил этот вариант на случай, если кому-то понадобится шаблон для обновления всех заголовков записей или других свойств всех записей.

Или используйте -1
для всех записей вместо 1000, как в этом примере.

Простой способ не работает. Быстрое редактирование не работает, как я уже говорил, только полное редактирование записи. Я не знаю почему, возможно потому что эта кнопка запускает команду "опубликовать" вместо "обновить". Есть ли способ принудительно "опубликовать" записи вместо "обновления"?

Нет, не работает. Думаю, завтра вручную отредактирую все записи, это займет пару часов, но я уже потратил полдня на поиск решений. Спасибо всем.

Так же, как и у @AlexPTY, этот код должен быть аналогичен массовому обновлению. Не имеет эффекта.

Первое: Получить все записи с помощью get_posts
или WP_Query
.
$query_posts = new WP_Query( array(
'nopaging' => true,
) );
Второе: Сделать цикл по записям и использовать wp_update_post()
для каждой записи, указав параметр ID.
while ( $query_posts->have_posts() ) :
$query_posts->the_post();
wp_update_post( array(
'ID' => get_the_ID(),
'post_content' => get_the_content(),
) );
endwhile;
Поместите этот код в действие init или header/footer. Обновите страницу один раз и удалите код. Разместите этот код в functions.php, и все ваши записи будут обновлены при перезагрузке страницы.
add_action( 'init', function () {
$query_posts = new WP_Query( array(
'nopaging' => true,
) );
while ( $query_posts->have_posts() ) :
$query_posts->the_post();
wp_update_post( $post );
endwhile;
wp_reset_postdata();
} );

Спасибо, Максим, но этот код удалил содержимое всех моих записей при обновлении. Я восстановлю всё и попробую другое решение.

Установите содержимое текущей записи в параметр post_content
функции wp_update_post().
wp_update_post( array(
'ID' => get_the_ID(),
'post_content' => get_the_content()
) );

Отредактировал мой пост. Я протестировал свои решения на своем сайте. Все работает отлично.

всё равно не работает, только кнопка "обновить" при редактировании записи решает проблему. Видимо, придется редактировать все 810 записей. В любом случае, спасибо

Какое решение? Как это работает? Через хук save_post? Ручное редактирование... очень долгий путь))
