Изменение url
-
Здравствуйте
мне нужно
1) убрать из url /product-category/ и /product/
2) поставить в конец .htmlесть код к 1 и 2
По отдельности все работает как нужно. А вот вместе — ошибка 404… т.е. ссылка открывается в нужном формате, но страницы по этому адресу нет (она без .html на конце)
Как бы все это совместить?
-
вот этот код убирает /product-category/ и /product/
add_filter( 'request', 'change_requerst_vars_for_product_cat' ); add_filter( 'term_link', 'term_link_filter', 10, 3 ); add_filter( 'post_type_link', 'wpp_remove_slug', 10, 3 ); add_action( 'pre_get_posts', 'wpp_change_request' ); function change_requerst_vars_for_product_cat($vars) { global $wpdb; if ( ! empty( $vars[ 'pagename' ] ) || ! empty( $vars[ 'category_name' ] ) || ! empty( $vars[ 'name' ] ) || ! empty( $vars[ 'attachment' ] ) ) { $slug = ! empty( $vars[ 'pagename' ] ) ? $vars[ 'pagename' ] : ( ! empty( $vars[ 'name' ] ) ? $vars[ 'name' ] : ( ! empty( $vars[ 'category_name' ] ) ? $vars[ 'category_name' ] : $vars[ 'attachment' ] ) ); $exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s", array( $slug ) ) ); if ( $exists ) { $old_vars = $vars; $vars = array( 'product_cat' => $slug ); if ( ! empty( $old_vars[ 'paged' ] ) || ! empty( $old_vars[ 'page' ] ) ) { $vars[ 'paged' ] = ! empty( $old_vars[ 'paged' ] ) ? $old_vars[ 'paged' ] : $old_vars[ 'page' ]; } if ( ! empty( $old_vars[ 'orderby' ] ) ) { $vars[ 'orderby' ] = $old_vars[ 'orderby' ]; } if ( ! empty( $old_vars[ 'order' ] ) ) { $vars[ 'order' ] = $old_vars[ 'order' ]; } } } return $vars; } function term_link_filter( $url, $term, $taxonomy ) { $url = str_replace( "/product-category/", "/", $url ); return $url; } function wpp_remove_slug( $post_link, $post, $name ) { if ( 'product' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link ); return $post_link; } function wpp_change_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[ 'page' ] ) ) { return; } if ( ! empty( $query->query[ 'name' ] ) ) { $query->set( 'post_type', array( 'post', 'product', 'page' ) ); } }
А вот этот добавляет .html
function wpse_178112_permastruct_html( $post_type, $args ) { if ( $post_type === 'product' ) add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%.html", $args->rewrite ); } add_action( 'registered_post_type', 'wpse_178112_permastruct_html', 10, 2 ); function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) { if ( $taxonomy === 'product_cat' ) add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args['rewrite'] ); } add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 10, 3 );
но одновременно они не работают….
Можно попробовать через .htaccess, но я не подскажу точно какие нужны правила, чтобы прилепить хвост только к записям. Поищите сами
https://stackoverflow.com/questions/5745490/rewrite-rule-to-add-html-extensionпоставить в конец .html
Это что-то из баек прошлого века, сейчас гораздо большее значение имеют быстродействие, правильная навигация, корректная структура страниц и удобство работы с сайтом.
The discussion whether or not you should forcibly add .html (or any other extension) can be ended very quickly: Don’t do it.
The perfect WordPress SEO permalink structure [yoast.com]
да я понимаю, клиент хочет сохранить ссылки как на старом сайте…
клиент хочет сохранить ссылки как на старом сайте…
Если вы делаете редизайн старого сайта или переносите с другой cms, то логичнее наоборот внести в .htaccess редирект со старых ссылок на новые и избавиться от хвоста. Вскоре новые ссылки переиндексируются, сайт не потеряет позиции
спасибо, поставила перенаправление
- Тема «Изменение url» закрыта для новых ответов.