3

I'm trying to do some WordPress URL rewriting ...

Specifically I have custom post type that currently works like this:

http://mydomain.com/videos/post-title/

But I would like to have it located at:

http://mydomain.com/videos/author-name/post-title/

Is there any way to achieve this?

5

using Jhon's Custom Post Permalinks plugin it should be easy using:

/%post_type%/%author%/%postname%/
  • This completely solved the issue I was having. Thanks. – Thomas May 5 '11 at 12:39
  • glad i could help. – Bainternet May 5 '11 at 14:24
7

You can do this with your own code, without plugins.

To accept URLs of this format, it's enough if you set the rewrite slug when you register the post type:

add_action( 'init', 'wpse16427_init' );
function wpse16427_init()
{
    register_post_type( 'wpse16427', array(
        'label' => 'WPSE 16427',
        'public' => true,
        'rewrite' => array(
            'slug' => 'video/%author%',
        ),
    ) );
}

This will also generate author archives at video/[authorname].

To generate the new URLs, you need to replace the %author% part yourself, get_post_permalink() does not do this for you. So filter the output and replace it yourself:

add_filter( 'post_type_link', 'wpse16427_post_type_link', 10, 4 );
function wpse16427_post_type_link( $post_link, $post, $leavename, $sample )
{
    if ( 'wpse16427' == $post->post_type ) {
        $authordata = get_userdata( $post->post_author );
        $author = $authordata->user_nicename;
        $post_link = str_replace( '%author%', $author, $post_link );
    }
    return $post_link;
}
  • It's important to note here that the 10,4 part of add_filter is required to make this work. The precedence can be anything, but you have to specify at least 2 in the spot where the arguments list is defined, or you will not have access to $post – Travis Weston Feb 3 '16 at 20:35
0

goto the permalinks section on the settings in the admin panel, set a custom structure like so:

/%category%/%author%/%postname%/

NOTE

this assumes videos is a category

Check here for more options.

  • Videos is not a category. It's a custom post type. – Thomas May 5 '11 at 12:29
  • I think that you can just drop the /%category% bit, and Wordpress will stick the slug for your post type there anyway. – Mild Fuzz May 5 '11 at 12:33
0

use the following structure if you installed wordpress in a subdirectory (videos)

/%author%/%postname%/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.