Có rất nhiều cách để thêm /blog/ vào đường dẫn trong single post tuy nhiên có một số điểm hạn chế.

Như cách thêm /blog/ ở trong phần Permalinks trong Setting thì khi bạn customs dạng như thế này:

/blog/%postname%/

Thì toàn bộ link thuộc single sẽ bị đổi theo ví dụ như bạn tạo thêm một taxonomy nào đó hoặc custom post type nào đó sẽ bị thêm /blog/ vào đường dẫn:

Nay THCmedia sẽ hướng dẫn các bạn cách thêm /blog/ chỉ riêng cho single post mà không làm thêm nó ở các single khác.

Bạn add đoạn code này vào function.php nhé

**
 * Add new rewrite rule
 */
function create_new_url_querystring() {
    add_rewrite_rule(
        'blog/([^/]*)$',
        'index.php?name=$matches[1]',
        'top'
    );

    add_rewrite_tag('%blog%','([^/]*)');
}
add_action('init', 'create_new_url_querystring', 999 );


/**
 * Modify post link
 * This will print /blog/post-name instead of /post-name
 */
function append_query_string( $url, $post, $leavename ) {

    if ( $post->post_type != 'post' )
        return $url;


    if ( false !== strpos( $url, '%postname%' ) ) {
        $slug = '%postname%';
    }
    elseif ( $post->post_name ) {
        $slug = $post->post_name;
    }
    else {
        $slug = sanitize_title( $post->post_title );
    }

    $url = home_url( user_trailingslashit( 'blog/'. $slug ) );

    return $url;
}
add_filter( 'post_link', 'append_query_string', 10, 3 );


/**
 * Redirect all posts to new url
 * If you get error 'Too many redirects' or 'Redirect loop', then delete everything below
 */
function redirect_old_urls() {

    if ( is_singular('post') ) {
        global $post;

        if ( strpos( $_SERVER['REQUEST_URI'], '/blog/') === false) {
            wp_redirect( home_url( user_trailingslashit( "blog/$post->post_name" ) ), 301 );
            exit();
        }
    }
}
add_filter( 'template_redirect', 'redirect_old_urls' );

Chúc các bạn thành công