Как принудительно обновить все записи после импорта

20 февр. 2018 г., 10:31:34
Просмотры: 25.7K
Голосов: 2

Недавно я импортировал большое количество пользовательских записей в WordPress. Всё работает нормально, за исключением одной таксономии, которая импортирована, но не отображается на фронтенде до тех пор, пока я не нажму кнопку "Обновить" для каждой записи. У меня 810 записей, и это не решение...

Я думаю, должен быть способ выполнить MySQL команду, чтобы принудительно обновить все записи без внесения каких-либо изменений. Пожалуйста, помогите мне с командой, я искал плагины и не могу найти ничего подходящего

Спасибо

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

Небольшая подсказка: в интерфейсе есть массовое действие для обновления всех записей. Вам нужно изменить список всех записей, в правом верхнем углу экрана настроек для количества записей. После этого используйте массовое действие для обновления всех перечисленных записей.

bueltge bueltge
20 февр. 2018 г. 11:05:24

Извините, я не программист... если вы имеете в виду массовое действие на экране админки, оно не работает. Единственное, что работает для меня — это заходить в каждую запись и нажимать кнопку "Обновить".

AlexPTY AlexPTY
20 февр. 2018 г. 11:14:52

Да, это для пользователей без знаний программирования. Перейдите в wp-admin/edit.php и выберите опцию редактирования в массовых действиях, также выделите все записи и нажмите Применить. Теперь откроется вид быстрого редактирования первой выбранной записи, и вы можете изменить данные, которые обновятся во всех выбранных записях после обновления.

bueltge bueltge
20 февр. 2018 г. 11:35:57

как я уже говорил, это не работает при массовом действии, работает только кнопка "обновить" для каждого поста

AlexPTY AlexPTY
20 февр. 2018 г. 11:50:04
Все ответы на вопрос 3
5

Есть 2 способа, как это можно сделать. Первый и более сложный — написать программу, другой — выполнить массовое обновление. Зачем усложнять, если простой способ работает так же хорошо? Особенно учитывая, что это разовая задача.

Простой способ:

  1. В админ-панели выберите список всех записей вашего пользовательского типа
  2. Выделите все записи (поставьте галочки) — вы можете увидеть больше записей, нажав «Настройки экрана» в правом верхнем углу и увеличив количество элементов на странице
  3. Нажмите на стрелку вниз рядом с «Групповые действия» и выберите «Изменить»
  4. Нажмите «Применить» — откроется экран с выбором изменений, которые можно внести
  5. Внесите какое-нибудь изменение, например добавьте тег или измените автора (что угодно)
  6. Нажмите «Обновить»

Этого должно быть достаточно.

«Сложный» способ:

На случай, если кто-то захочет использовать программное решение, вы можете добавить приведенный ниже код в файл 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, иначе он будет выполняться каждый раз при загрузке новой страницы.

Я добавил этот вариант на случай, если кому-то понадобится шаблон для обновления всех заголовков записей или других свойств всех записей.

20 февр. 2018 г. 11:31:33
Комментарии

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

bueltge bueltge
20 февр. 2018 г. 13:20:13

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

AlexPTY AlexPTY
20 февр. 2018 г. 13:38:11

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

AlexPTY AlexPTY
20 февр. 2018 г. 14:44:42

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

Michael Rogers Michael Rogers
27 мар. 2020 г. 21:51:28

Вы можете удалить строку $mypost->post_title = $mypost->post_title.'';. Кроме того, если использовать wp_insert_post( $mypost );, это будет немного быстрее. (это не создаст новую запись, так как ID остаётся тем же)

Jules Jules
24 дек. 2020 г. 14:27:46
9

Первое: Получить все записи с помощью 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();
} );
20 февр. 2018 г. 11:58:42
Комментарии

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

AlexPTY AlexPTY
20 февр. 2018 г. 13:31:58

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

Maxim Sarandi Maxim Sarandi
20 февр. 2018 г. 13:33:37

Извините, я не программист. Я могу только копировать/вставлять ;)

AlexPTY AlexPTY
20 февр. 2018 г. 13:48:45

Отредактировал мой пост.

Maxim Sarandi Maxim Sarandi
20 февр. 2018 г. 13:50:40

извините, при обновлении содержимое поста просто стирается.

AlexPTY AlexPTY
20 февр. 2018 г. 13:56:00

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

Maxim Sarandi Maxim Sarandi
20 февр. 2018 г. 14:01:26

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

AlexPTY AlexPTY
20 февр. 2018 г. 14:12:41

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

Maxim Sarandi Maxim Sarandi
20 февр. 2018 г. 14:15:18

Возможно, вам нужно добавить global $post перед wp_update_post( $post );, вероятно, из-за отсутствия этого контент записи удаляется при обновлении?

Iurie Iurie
30 окт. 2022 г. 01:18:22
Показать остальные 4 комментариев
1
-1

Для всех, кто заинтересуется в будущем: для массового обновления постов по одному вы можете использовать расширение Chrome Web Scraper, которое автоматизирует клики по кнопке обновления для каждого поста.

6 мар. 2020 г. 12:30:13
Комментарии

как ты это сделал? Я пытаюсь использовать, но ничего не работает как ожидается

moeses moeses
4 февр. 2021 г. 18:07:18