• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Удалить ярлык категории и добавить html в конец ссылки

Igorsrt

Форумчанин
Здравствуйте! Второй день не могу разобраться
Есть функция для добавления в ссылку категории товаров woocommerce окончания ".htm":

function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) {
if ( $taxonomy === 'product_cat' )
add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args );
}
add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 20, 3 );

Сама по себе она работает как надо. Но мне нужно еще было удалить из адресной строки ярлык "product-category" - для этого нашел другой код:

add_filter('request', 'true_smenit_request', 1, 1 );
function true_smenit_request( $query ){
$taxonomia_name = 'product_cat';
if( $query['attachment'] ) : $dochernia = true;
$urlyarlyk = $query['attachment'];
else: $dochernia = false;
$urlyarlyk = $query['name'];
endif;
$termin = get_term_by('slug', $urlyarlyk, $taxonomia_name);
if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )):
if( $dochernia ) {
unset( $query['attachment'] );
$parent = $termin->parent;
while( $parent ) {
$parent_term = get_term( $parent, $taxonomia_name);
$urlyarlyk = $parent_term->slug . '/' . $urlyarlyk;
$parent = $parent_term->parent;
}
}
else {
unset($query['name']);
}
switch( $taxonomia_name ):
case 'category':{
$query['category_name'] = $urlyarlyk;
break;
}
case 'post_tag':{
$query['tag'] = $urlyarlyk;
break;
}
default:{
$query[$taxonomia_name] = $urlyarlyk;
break;
}
endswitch;
endif;
return $query; } // смена самой ссылки
add_filter( 'term_link', 'true_smena_permalink', 10, 3 );
function true_smena_permalink( $url, $term, $taxonomy, $args ){
$taxonomia_name = 'product_cat';
$taxonomia_slug = 'product-category';
if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url; $url = str_replace('/' . $taxonomia_slug, '', $url);
return $url; }

Этот код отдельно тоже исправно работает.. Но вместе они работать не хотят - ссылка формируется, так как я и хочу, но открывается по ней страница 404. (а рабочая категория открывается по ссылке без окончания .html).
Предполагаю, что что-то нужно изменить в строке add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args );, но не знаю как (если я удаляю "{$args['rewrite']['slug']}" - то категории начинают открываться как надо, но все остальные страницы - ошибка 404).
Кто-нибудь разбирается в этой структуре ЧПУ? ;)
 

Igorsrt

Форумчанин
https://wpcommerce.ru/threads/plagin-perfect-seo-url.3064/

а зачем вам html в ссылке, я даже не представляю
Потому что все остальные страницы на сайте уже имеют окончания .html - что бы было одинаково... Насколько это полезно или бесполезно для сео - это уже другой вопрос... Меня интересует техническая сторона задачи.
 

tuxfighter

Гуру
Местный
мб лехче убрать html на других страницах?
впрочем ваше дело, дерзайте
 

tuxfighter

Гуру
Местный
видимо вы единственный человек, которому это понадобилось
 
Сверху Снизу