«Красивые» постоянные ссылки включаются для всех типов данных сразу — записей, страниц, рубрик, меток. Старые адреса вида ?page_id=824 будут перенаправляться на новые.
спасибо за ответ! а нельзя ли изменить только несколько ссылок на «красивые» а чтобы все остальные оставались такими как есть ?
Хотел ответить, что простого решения нет, но вдохновился и придумал 🙂
Можно добавить фрагмент в functions.php
активной темы:
$custom_page_links = array(
'824' => 'about.html',
);
function change_page_links($link, $id) {
global $custom_page_links;
if ( in_array( $id, array_keys($custom_page_links) ) )
$link = home_url( $custom_page_links[$id] );
return $link;
}
add_filter('page_link', 'change_page_links', 10, 2);
function change_query_vars($query_vars) {
global $custom_page_links;
$custom_page_ids = array_flip($custom_page_links);
if ( !empty($_REQUEST['page_id']) ) {
$page_id = $_REQUEST['page_id'];
if ( in_array($page_id, $custom_page_ids) ) {
wp_redirect( home_url( $custom_page_links[$page_id] ), 301 );
exit();
}
}
$request_uri = $_SERVER['REQUEST_URI'];
$home_path = parse_url( home_url() );
if ( isset($home_path['path']) )
$request_uri = preg_replace("|^{$home_path['path']}|", '', $request_uri);
$request_uri = trim($request_uri, '/');
if ( in_array($request_uri, array_keys($custom_page_ids) ) )
$query_vars['page_id'] = $custom_page_ids[$request_uri];
return $query_vars;
}
add_filter('request', 'change_query_vars');
Спасибо большое за помошь, но почему-то не сработало.. а я уже было так обрадовался.. выводит кучу каких-то ошибок в шапке, вот скриншот:
http://amor-photo.com/upload/func.jpg
я вставил этот фрагмент в самый низ файла functions.php активной темы.
Модератор
Юрій
(@yube)
я вставил этот фрагмент в самый низ файла functions.php активной темы.
Надо не в самый, а перед «закрывалкой» ?>
ок, получилось! ссылка поменялась на текстовую, только при нажатии не открывает нужную страницу — пишет что такая страница «about.html» не найдена! что делать ?
Создайте в корневом каталоге файл .htaccess
с правилами WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
wow! все работает.. респект вам, Сергей!
спасибо большое за помощь, надеюсь подводных камней от этого никаких не возникнет? ) например с поисковиками и т.п. ?
Можно добавить перенаправление со старых адресов с кодом 301, чтобы исключить дубли. Обновил первый фрагмент.