Андрей Д.
32 года, Украина
33 сообщения
#15 дней назад
Для записей из стандартной категории Блог понадобилось использовать ЧПУ с категорией - site.com/blog/post-title. В целом же на сайте следующая структура ЧПУ - site.com/post-title. Задача была реализована следующим кодом в function.php
add_action('init', function()
{
    add_rewrite_rule('^blog/([^/]+)/?$', 'index.php?name=$matches[1]', 'top');
}, 10, 0);
add_filter('post_link', function($post_link, $post, $leave_name = false, $sample = false)
{
    if ( has_category('blog', $post) ) {
        $post_link = str_replace('/' . $post->post_name, '/blog/' . $post->post_name, $post_link);
    }
    return $post_link;
}, 10, 4);
Все работает хорошо, но есть одна проблема. Если использовать ссылку site.com/post-title (вместо site.com/blog/post-title), то запись отображается и без /blog/, а хотелось бы, чтобы происходил редирект на site.com/blog/post-title. Подскажите, как реализовать редирект в коде?
Григорий Пелипенко
56 лет, Украина
179 сообщений
#15 дней назад
bek03,
Как-то так
function redirect($url)
{
$output =
'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">';
$output.='<html><head>';
$output.='<meta http-equiv="content-type" content="text/html; charset=utf-8">';
$output.='<meta http-equiv="refresh" content="0;';
$output.=' url='.$url.'">';
$output.='<link rel="StyleSheet" type="text/css" href="css/style.css">';
$output.='</head>';
$output.='<body>';
$output.='</body></html>';
@header("HTTP/1.0 200 OK";
@header("Content-type: text/html;charset=utf-8";
@header("Cache-Control: no-cache, must-revalidate, max-age=0";
@header("Expires: 0";
@header("Pragma: no-cache";
print $output;
die();
};
Ну "рожи" - правая круглая скобка, естественно
Заголовки можете менять, как угодно
Андрей Д.
32 года, Украина
33 сообщения
#15 дней назад
oldbadger, кажется, вы совершенно не поняли суть проблемы. Но за попытку спасибо!
Жандос Мукатаев
21 год, Казахстан
144 сообщения
#15 дней назад
bek03, Что такое blog у вас? Это категория, архив? 

Если с site.ru/blog/post1 перейти на site.ru/blog - что произойдет? Она будет что-то отдавать?

Нельзя менять формат ссылок через functions.php. Думаю нужно иначе реализовать. Правда пока не понял, что за дичь происходит =)
Андрей Д.
32 года, Украина
33 сообщения
#15 дней назад
Blog - это стандартная категория wordpress. Если с site.ru/blog/post1 перейти на site.ru/blog, то будут отображаться список записей в этой рубрике.
Олег Медведь
33 года, Украина
107 сообщений
#15 дней назад
Я так понимаю что вам нужно чтобы blog присутствовало только в сингл постах которые относятся к рубрике blog. 
А посты других категорий выводились просто site.com/post-title
Если так то как вариант создайте кастом пост тайп blog и не мучайтесь с редиректами и реврайтами