最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

Custom permalink structure with a prefix just for posts

matteradmin4PV0评论

I would like to set a permalink structure with a prefix that will appear just on the posts. The prefix should only be displayed for the posts and not for the permalinks of categories or tags.

I set the permalink structure as /post/%post_id% and the post URL is example/post/12345. But the prefix added also to the categories and tags and it become example/post/category/news instead of example/category/news. How I can do it?

I would like to set a permalink structure with a prefix that will appear just on the posts. The prefix should only be displayed for the posts and not for the permalinks of categories or tags.

I set the permalink structure as /post/%post_id% and the post URL is example/post/12345. But the prefix added also to the categories and tags and it become example/post/category/news instead of example/category/news. How I can do it?

Share Improve this question edited Mar 31, 2019 at 11:20 Yossi Aharon asked Mar 29, 2019 at 10:05 Yossi AharonYossi Aharon 797 bronze badges 0
Add a comment  | 

1 Answer 1

Reset to default 1

There are different ways to achieve this result, I used pre_post_link and post_rewrite_rules filter hooks.

You can use eg. generate_rewrite_rules hook, but with post_rewrite_rules, you can easily change permalinks not only to the post but also to its comments, attachments, etc. Original permalinks you can keep or replace with new ones.

After adding the following code click Save in Dashboard -> Settings -> Permalinks.

add_filter('pre_post_link', 'se332921_pre_post_link', 20, 3);
add_filter('post_rewrite_rules', 'se332921_post_rewrite_rules');

/**
 * @param string  $permalink The site's permalink structure.
 * @param WP_Post $post      The post in question.
 * @param bool    $leavename Whether to keep the post name.
 */
function se332921_pre_post_link($permalink, $post, $leavename)
{
    if ( $post instanceof WP_Post && $post->post_type == 'post')
        $permalink = '/post-prefix'.$permalink;
    return $permalink;
}

/**
 * @param array $post_rewrite The rewrite rules for posts.
 */
function se332921_post_rewrite_rules($post_rewrite) 
{
    if ( is_array($post_rewrite) ) 
    {
        $rw_prefix = [];
        foreach( $post_rewrite as $k => $v) {
            $rw_prefix[ 'post-prefix/'.$k] = $v;
        }
        //
        // merge to keep original rules
        $post_rewrite = array_merge($rw_prefix, $post_rewrite);
        //
        // or return only prefixed:
        // $post_rewrite = $rw_prefix;
    }
    return $post_rewrite;
}
Post a comment

comment list (0)

  1. No comments so far