ЧПУ
Для нормального отображения всех ссылок страниц сайта, одним из первых дел при создании сайта необходимо установить плагин Cyr to Lat enhanced.
Для отключения из адресной строки /category/ — плагин Remove Category URL (50 000 установок).
Варианты схем постоянных ссылок
Если на сайте используется только одна категория для записи, то предпочтительнее вариант: /%category%/%postname%/
Если же для одного поста могут быть назначены несколько категорий, то запись будет дублироватся по двум разным адресам:
- сайт/категория1/статья1
- сайт/категори2/статья1
что не очень хорошо для продвижения. Также возможна путаница в breadcrumbs. В этом случае лучше использовать схему: /%postname%/
Внутренние ссылки
На внутренние ссылки по сайту удобнее устанавливать относительные ссылки:
<a href="../breadcrumbs/">breadcrumbs</a>
Сайт и категории при этом будут генерироватся налету, и при изменении структуры сайта или переносе не пострадают.
Относительный путь для изображений
При вставке изображений в запись им принудительно прописывается абсолютный url. Это не удобно при изменении домена сайта, либо включении сертификата SSL. Конечно при описаных случаях можно внести корректировку через базу данных, но зачем лишние движения.
Отключить указание хоста можно плагином Relative Image URLs (4000+), а простой функцией (которая немногим отличается от той что в плагине) можно и вовсе убрать домен:
// Убирать домен при импорте изображения в запись
function switch_to_relative_url($html, $id, $caption, $title, $align, $url, $size, $alt)
{
$imageurl = wp_get_attachment_image_src($id, $size);
$relativeurl = wp_make_link_relative($imageurl[0]);
$html = str_replace($imageurl[0],$relativeurl,$html);
return $html;
}
add_filter('image_send_to_editor','switch_to_relative_url',10,8);
Изображения будут вставляться в таком виде:
<img class=»alignnone size-full wp-image-257″ src=»/wp-content/uploads/2018/03/vn_2.jpg» alt=»» width=»1000″ height=»433″ />
Убрать из WC /product/ и /product-category/
Чтобы убрать префикс у категорий товаров нужно проделать следующее:
1. Установить этот код в fuctions.php:
//Убрать из URL /product/ и /product-category/
add_filter('request', function( $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;
});
2. В настройках url (постоянные ссылки) в строке База категорий товара прописать точку (.)
Убрать лишние префиксы можно с помощью плагина WooCommerce Permalink Manager (9000). После установки плагина нужно поставить 2 галки для формирования URL категорий и товаров.
Проблемы URL
В woocommerce столкнулся с такой проблемой — если url товара состоит из одних цифр (при этом вложенность категории 3 и более), страница товара выдает 404 ошибку. Решение: добавлять к цифрам символы, например наименование подкатегории в которую он входит.
Пример такого url: site.ru/tovar/kovrolin/kovrolin-v-rulonah/sintelon/kovrolin-oasis/74423/
Автоматический 301-редирект
У WP есть встроенный механизм автоматического 301-редиректа. Например по несуществующему адресу:
https://site.ru/agentam/booking/
произойдет переход на страницу
https://site.ru/booking/
Но данные редиректы могут негативно сказаться на индексировании. Отключить данный механизм можно функцией
// Отключить автоматические редиректы WP
function remove_redirect_guess_404_permalink( $redirect_url ) {
if ( is_404() && !isset($_GET['p']) )
return false;
return $redirect_url;
}
add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );
[site-socialshare]