While researching this topic myself, I found a plugin called Post Format Permalink. However, this plugin is not compatible with recent versions of WordPress; it is also filled with unnecessary code.
I forked the plugin’s repository on GitHub, and improved the code greatly. I can now use a %post_format%
tag in my permalink structure, and that works fine. Mostly.
The problem is, posts with no post format are displaying as http://example.com/standard/just-another-post
, which is not the desired outcome. I’ll keep working on this, and post an update here.
Here is the code I used. It can also be found on GitHub:
<?php
/**
* Plugin Name: Post Format Permalink
* Plugin URI: https://wordpress.stackexchange.com/q/70627/19726
* Description: Include the post format slug in your permalinks. Simply use the <code>%post_format%</code> tag as part of your custom permalink.
* Version: 1.2
* Author: shea
* Author URI: https://wordpress.stackexchange.com/users/19726
*/
add_filter( 'post_link', 'post_format_permalink', 10, 2 );
add_filter( 'post_type_link', 'post_format_permalink', 10, 2 );
function post_format_permalink( $permalink, $post_id ) {
// if we're not using the %post_format% tag in our permalinks, bail early
if ( strpos($permalink, '%post_format%') === FALSE ) return $permalink;
// get the post object
$post = get_post( $post_id );
if ( ! $post ) return $permalink;
// get post format slug
$format = get_post_format( $post->ID );
// set the slug for standard posts
if ( empty( $format ) )
$format = apply_filters( 'post_format_standard_slug', 'standard' );
// apply the post format slug to the permalink
return str_replace( '%post_format%', $format, $permalink );
}