
Здравствуйте! Второй день не могу разобраться
Есть функция для добавления в ссылку категории товаров 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).
Кто-нибудь разбирается в этой структуре ЧПУ?
Есть функция для добавления в ссылку категории товаров 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).
Кто-нибудь разбирается в этой структуре ЧПУ?