attachment url rewrite

The question:

i want to change the address of the file attachment link to wordpress [example: etc.]. i did research on the subject a few days, but could not get any results..

looking at the structure of the connection! after “.html“, “/” mark does not look very nice to come. also the “attachment” as the fixing of that section, for WordPress users of different languages are missing a very large. i mean; rewrite.php file links to the author for the “author” from the base. this too, edit with the help of a simple function;

global $wp_rewrite;
$wp_rewrite->author_base = 'example';

i can not for this “attachment” :/ i tried so hard but i could not deal with this problem…

anyway, i wanted to ask you!

i’m not a coder (i’m a graphic designer). i want to do, so maybe things can make the limits of logic (: image.php file as it is sufficient to open a url more sense to me …

this link;

whether such;

i do not know would not open the image.php file in the form of “?file=image“. so i can carry out your suggestions.

thank you in advance.

Metin METE

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Actually, you can always just use a query parameter, even if you have the “pretty” permalinks enabled. So instead of /category/sub-category/article.html/attachment/image you can go to /?attachment=image. The only case when this “breaks down” is when you go to /category/sub-category/article.html?attachment=image, because WordPress gets confused: it tries to query for a post and an attachment at the same time. However, this is very simple to handle: check for the request, and if it is an attachment remove the other parameters.

add_action( 'parse_request', 'wpse5015_parse_request' );
function wpse5015_parse_request( $wp )
    if ( array_key_exists( 'attachment', $wp->query_vars ) ) {
        unset( $wp->query_vars['name'] );
        unset( $wp->query_vars['year'] );
        unset( $wp->query_vars['monthnum'] );

Now you only have to change the generated attachment URLs. Since they are almost in the correct format, we can just so some search and replace:

add_filter( 'attachment_link', 'wpse5015_attachment_link', 10, 2 );
function wpse5015_attachment_link( $link, $id )
    // If the attachment name is numeric, this is added to avoid page number conflicts
    $link = str_replace( 'attachment/', '', $link );
    $attachment = get_post( $id );
    $link = str_replace( '/' . $attachment->post_name . '/', '?attachment=' . $attachment->post_name, $link );
    return $link;

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment