Изменение постоянных ссылок только для типа записи 'post'
Как и многие другие, я хотел бы изменить: domain.com/post-title на domain.com/blog/post-title но только для типа записи 'post', а не для 'page' и особенно не для пользовательских типов записей (которых в моей теме, кажется, довольно много).
Я провел исследование на этом форуме и других источниках и знаю, что общий ответ кажется таким:
При регистрации вашего типа записи аргумент with_front в rewrite должен быть false.
$args = array(
'rewrite' => array( 'with_front' => false ),
);
register_post_type( 'your-post-type', $args );
К сожалению, это не помогает новичкам. Мы не понимаем, что означают приведенные выше инструкции. По-видимому, мы должны каким-то образом перерегистрировать стандартный тип записи "post" (хотя тип записи "post" уже существует и используется), но мы не знаем, как и где это сделать. Если кто-то может пролить свет на необходимую процедуру изменения URL записей блога, я буду очень благодарен.

Я нашел ответ здесь. Не забудьте зайти и поставить лайк.
Я опубликую его здесь для тех, кто торопится.
Добавьте это в файл functions.php
:
function wp1482371_custom_post_type_args( $args, $post_type ) {
if ( $post_type == "post" ) {
$args['rewrite'] = array(
'slug' => 'blog'
);
}
return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );
(Протестировано и работает).
Не забывайте!!
Помните А) Не забудьте обновить постоянные ссылки после этого (перейдя в Настройки >> Постоянные ссылки >> Нажмите "Сохранить изменения" ).
Помните Б) Если вы получите странные результаты, попробуйте открыть окно в режиме инкогнито и проверить там. В WordPress есть функция, которая перенаправляет на 'Ближайший совпадающий URL', что может сбивать с толку при изменении постоянных ссылок.
Вы также можете попробовать найти плагин, который это делает. Я бы не стал так делать, так как добавлять плагин только для этой цели — это излишне. Но, эй, — иногда приятно стрелять по воробьям из пушки (при создании этой шутки ни одна птица не пострадала).

Краткое и красивое решение с понятным объяснением. К сожалению, это не то, что мне нужно. В текущем варианте используется определение "rewrite" для перенаправления на старый постоянный URL ("/blog/post" -> "/post"). Однако я хочу сохранить URL "/blog/post". Как этого добиться?

Дополнение: это можно исправить, добавив следующий код: add_filter('pre_post_link', 'my_change_post_link', 10, 3);
function my_change_post_link($permalink, $post, $leavename) {
if (get_post_type($post) == 'post') {
return "/blog" . $permalink;
}
return $permalink;
}

@Chaoste О боже, какое совпадение - мне это понадобилось буквально на следующий день. Искал везде - ОГРОМНОЕ СПАСИБО!

Вы пробовали этот вариант?
function generate_rewrite_rules( $wp_rewrite ) {
$new_rules = array(
'(.?.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=$matches[1]&paged=$matches[2]',
'blog/([^/]+)/?$' => 'index.php?post_type=post&name=$matches[1]',
'blog/[^/]+/attachment/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
'blog/[^/]+/attachment/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
'blog/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
'blog/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
'blog/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',
'blog/[^/]+/attachment/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
'blog/[^/]+/embed/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
'blog/([^/]+)/embed/?$' => 'index.php?post_type=post&name=$matches[1]&embed=true',
'blog/[^/]+/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
'blog/([^/]+)/trackback/?$' => 'index.php?post_type=post&name=$matches[1]&tb=1',
'blog/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
'blog/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
'blog/page/([0-9]{1,})/?$' => 'index.php?post_type=post&paged=$matches[1]',
'blog/[^/]+/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
'blog/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
'blog/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&cpage=$matches[2]',
'blog/([^/]+)(/[0-9]+)?/?$' => 'index.php?post_type=post&name=$matches[1]&page=$matches[2]',
'blog/[^/]+/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
'blog/[^/]+/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
'blog/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
'blog/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
'blog/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'generate_rewrite_rules' );
function update_post_link( $post_link, $id = 0 ) {
$post = get_post( $id );
if( is_object( $post ) && $post->post_type == 'post' ) {
return home_url( '/blog/' . $post->post_name );
}
return $post_link;
}
add_filter( 'post_link', 'update_post_link', 1, 3 );

// Поместите код в файл function.php
add_action('init', 'my_new_default_post_type', 1);
function my_new_default_post_type()
{
register_post_type('post', array(
// 'labels' => $labels,
'public' => true,
//'show_in_admin_bar' => true,
'_builtin' => false,
'_edit_link' => 'post.php?post=%d',
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'rewrite' => array('slug' => 'resources/blog'), // Укажите свой slug здесь
'query_var' => false,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats'),
));
/* Если вы добавите этот код в function.php, пагинация блога перестанет работать. Вам нужно добавить правило перезаписи, используя плагин "Debug This" в разделе Query >> Rewrite Section и изменить свой rewrite_rule. */
add_rewrite_rule('(.?.+?)/page/?([0-9]{1,})/?$', 'index.php?pagename=resources/blog&paged=$matches[1]', 'top');
}
