• Добрый день! Помогите пожалуйста решить проблему. Сайт долгое время работал без использования ЧПУ. И вот недавно установил плагин Cyr-To-Lat. Всё бы вроде хорошо, но старые записи переведённые на транслит обрезаются. http://snegurochka-dr.ru/novosti/unikalnaya-progulka-skazochnyih-perso/

    Вычитал на форумах, что проблема вроде бы заключается в следующем:
    …Вся загвоздка в том, что изначально CMS WordPress спроектирована таким образом, что длина поля базы данных для хранения URL составляет 200 однобайтных (латинских) символов. В случае с английскими символами длина URL ограничивается именно этими 200 символами. В случае русского языка происходит преобразование в кодовую последовательность, в которой каждой русской букве соответствует 6 символов (например, русская буква “а” будет заменена на “%D0%B0”), т.е. вместо 200 символов длина русского URL составляет всего около 33 символов (200/6=33.33333), остальные символы будут обрезаны. Т.е. WordPress без проблем работает с русским языком в пределах длины URL в 33 символа. Поскольку, существует понятие «длина поля базы данных для хранения permalink» и она составляет 200 однобайтовых (латинских) символов, то вполне резонно предположить, что эта длина черным по белому где-то прописывается в ядре WordPress, а значит ее можно изменить.

    Так ли это и где исправить эту проблему?

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Юрій

    (@yube)

    Я бы не советовал увеличивать длину url. Много где (проксеры, каталоги, счетчики, агрегаторы и т.д. и т.п.) имеет место ограничение в 255 байт (старый добрый varchar). Возможны коллизии.

    Да и не модно уже смотреть на адресную строку 🙂

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    резонно предположить, что эта длина черным по белому где-то прописывается в ядре WordPress, а значит ее можно изменить.

    Изменить-то можно, но это не повлияет ни на старые ярлыки (т.к. они уже обрезаны), ни на новые (они создаются сразу на латинице).

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

    Если удалить ярлык, будет создан новый, на латинице и без обрезания, а со старого будет создно перенаправление.

    Также можно пересоздать все ярлыки с помощью подобного скрипта, разместив его в корневом каталоге и запустив оттуда:

    <?php
    require 'wp-load.php';
    
    echo "Regenerating post slugs...<br />\n";
    $posts = $wpdb->get_results( "SELECT ID, post_title, post_name FROM {$wpdb->posts} WHERE post_status = 'publish'" );
    foreach ( (array) $posts as $post ) {
    	$post_name = sanitize_title( $post->post_title );
    	if ( $post_name !== $post->post_name ) {
    		add_post_meta( $post->ID, '_wp_old_slug', $post->post_name );
    		$wpdb->update( $wpdb->posts, array( 'post_name' => $post_name ), array( 'ID' => $post->ID ) );
    	}
    }
    
    echo 'All done!';
    ?>

    Перед запуском не забудьте сделать резервную копию базы.

    Большое спасибо! воспользовался скриптом! ура! проблема решена)

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Не работает ЧПУ, обрезаются ссылки» закрыта для новых ответов.