Решил я тут с одного старого сайта ( не на WooCommerce ) перенести товары на новый сайт с WooCommerce. Набросал по-быстрому скрипт экспорта custom’ных постов в съедобный для WooCommerce CSV-формат и при первой попытке импорта тут же получил:

Всему виной конечно же длинные наименования атрибутов и лень WooCommerce разработчиков — почему нельзя было в функционале импорта предусмотреть корректную обрезку slug’ов для импортируемых атрибутов товаров?

Пошел гуглить и нашел темку: https://ru.wordpress.org/support/topic/%D0%B4%D0%BB%D0%B8%D0%BD%D0%B0-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B0-2 — где никакого решения не нашли, тему закрыли…

Ну что же, поискав нашел место в коде WooCommerce где происходит эта самая обработка slug’ов для загружаемых терминов таксономий ( атрибутов товаров ). Увидел hook sanitize_taxonomy_name и навесил свой фильтр:

add_filter( ‘sanitize_taxonomy_name’, function( $urldecode, $taxonomy ) {
 $urldecode = mb_substr($urldecode, 0, 27, ‘utf-8’);
 return $urldecode;
}, 10, 2 );

Вставляете этот код в functions.php Вашей активной темы и больше не увидите сообщение о длинных ярлыках.

p.s.: наверное всё-таки надо написать об этом в WooCommerce — много лет одна и та же пустяковая проблема, которую они никак не могут решить! также, я не увидел в коде уникализации slug’ов атрибутов и не проверял как это работает ( ведь в импорте могут быть похожие наименования атрибутов по первым 28 символам slug’а ) :

$urldecode = wp_unique_term_slug($urldecode, $taxonomy);

Комментарии (7)


  1. Giperoglif
    24.09.2021 05:01

    В принципе slug не обязан быть уникальным. Это частое явление. Поэтому обычно в url'е присутствует тот или иной Id. Но ограничение его длины до 27 символов - конечно сомнительное мероприятие.


    1. easycode Автор
      24.09.2021 12:43

      в WordPress slug не обязан быть уникальным? )) Он же участвует в URL-адресах и при определенных настройках постоянных ссылок являются определяющим уникальность адреса. И почему до 27и?


      1. Giperoglif
        24.09.2021 17:32

        я говорил об общем случае. 27 - что-то глаз зацепился, извините.


  1. Fortop
    24.09.2021 08:25

    почему нельзя было в функционале импорта предусмотреть корректную обрезку slug’ов для импортируемых атрибутов товаров?

    А вы для начала придумайте определение корректности обрезки, с которым кроме вас согласятся хотя бы 80% пользователей.

    А потом вернётесь и расскажете можно или нельзя придумать.


    1. easycode Автор
      24.09.2021 12:44

      а с невозможностью импортировать товары у которых атрибуты длиннее 28и символов 80% смирятся?


      1. Fortop
        26.09.2021 13:59

        Да.

        Отсутствие некоторого функционала (не жизненно-важного) пользователи переносят легче чем его неожиданно некорректную работы.


        1. easycode Автор
          26.09.2021 15:32

          т.е. невозможность импортировать товары через родной механизм импорта в WooCommerce перенесут пользователи легче, чем некорректную работу функции обрезки slug'ов - про которую большинстов пользователей WordPress даже не знают - ну есть она и есть по умолчанию - сама там эти slug'и генерирует да и ладно