eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Регенерация поля url для ЧПУ в posts

Необходимо регенерировать post_name, какого правила придерживаться? При переносе с другой системы информации, в ЧПУ возникли ошибки из-за неправильного перекодирования. Есть ли для этого готовая функция вордпресс или плагин? Или если это обычный алгоритм через php? В идеале конечно сделать командой sql...

0
Виталий
1.7 года назад
  • 5
    Dan Zakirov 721 air-wp.com

    Я не знаю правильно ли я отвечу на этот вопрос, потому что конкретики маловато, но ребята поправят если что.

    Можно юзануть такой SQL запрос, чтобы изменить post_name для нужных записей:

    UPDATE wp_posts SET post_name = REPLACE(post_name, 'old_value', 'new_value') WHERE post_type = 'post';

    Где old_value - текущее значение post_name, а new_value - новое значение.

    Виталий 1.7 года назад

    Не совсем то...
    Когда создаёшь пост, в поле post_name автоматом пишется код, который я так понимаю получается от заголовка поста, пропущенного через некоторую функцию. Нужно поправить в куче постов (созданных не через вордпресс) правильные post_name

    Dan Zakirov 1.7 года назад

    Есть такой плагин... как то он так называется - Auto Post Slug... Просто я может задачу не понимаю, как понять, посты не созданные через ВП?

    Может быть так попробовать? - сделайте бекап сначала

    <?php
    // Подключение к базе данных WordPress
    require_once('wp-config.php');
    global $wpdb;
    
    // Выбор всех постов из базы данных
    $posts = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_type = 'post'");
    
    // Цикл по всем постам
    foreach ($posts as $post) {
      // Генерация нового post_name на основе заголовка поста
      $new_post_name = sanitize_title($post->post_title);
    
      // Обновление post_name в базе данных для текущего поста
      $wpdb->update(
    	"{$wpdb->prefix}posts",
    	array('post_name' => $new_post_name),
    	array('ID' => $post->ID)
      );
    }

    Вы можете сохранить этот скрипт как PHP файл и запустить его на вашем сервере. Если постов много то может буксануть, но по сути, в теории, должно обновить все post_name

    Dan Zakirov 1.7 года назад

    И куча постов это сколько? 10, 15, 20, 100, 1к, 10к, 100к... mosking Если несколько тысяч тогда другой вопрос

    Виталий 1.7 года назад

    15к.
    Написал скрипт переноса с очень старой цмс в посты вордпресс со всеми таксономиями с обрезкой и оптимизацией картинок. Рендерил 4часа. Всё легло замечательно. ЧПУ включил - не везде работает. Ну не очень важная штука, видать url не так сформировал.
    По вашему коду смотрю - да. Он подойдёт. Спасибо. Мне нужна функция.

    Dan Zakirov 1.7 года назад

    Так вот же плагин ребята делали наши https://ru.wordpress.org/plugins/cyr2lat/ в плагине можно и массово все поменять

    Виталий 1.7 года назад

    Да. Вчера тоже на такой получилось выйти

    Dan Zakirov 1.7 года назад

    Рад, что у вас все получилось. Сегодня кстати апдейт до ВП до 6.2

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация