Решил я тут с одного старого сайта ( не на 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)
Fortop
24.09.2021 08:25почему нельзя было в функционале импорта предусмотреть корректную обрезку slug’ов для импортируемых атрибутов товаров?
А вы для начала придумайте определение корректности обрезки, с которым кроме вас согласятся хотя бы 80% пользователей.
А потом вернётесь и расскажете можно или нельзя придумать.
easycode Автор
24.09.2021 12:44а с невозможностью импортировать товары у которых атрибуты длиннее 28и символов 80% смирятся?
Fortop
26.09.2021 13:59Да.
Отсутствие некоторого функционала (не жизненно-важного) пользователи переносят легче чем его неожиданно некорректную работы.
easycode Автор
26.09.2021 15:32т.е. невозможность импортировать товары через родной механизм импорта в WooCommerce перенесут пользователи легче, чем некорректную работу функции обрезки slug'ов - про которую большинстов пользователей WordPress даже не знают - ну есть она и есть по умолчанию - сама там эти slug'и генерирует да и ладно
Giperoglif
В принципе slug не обязан быть уникальным. Это частое явление. Поэтому обычно в url'е присутствует тот или иной Id. Но ограничение его длины до 27 символов - конечно сомнительное мероприятие.
easycode Автор
в WordPress slug не обязан быть уникальным? )) Он же участвует в URL-адресах и при определенных настройках постоянных ссылок являются определяющим уникальность адреса. И почему до 27и?
Giperoglif
я говорил об общем случае. 27 - что-то глаз зацепился, извините.