Your best bet is to use the WordPress rewrite API. No .htaccess required.
First, hook into init
and add a rewrite endpoint to your permalinks. This tells WordPress that whens some visits /category/post-slug/gallery
match the new endpoint rewrite. it also takes care of adding the query variable for you so you don’t have to do that.
<?php
add_action( 'init', 'wpse27638_add_rewrite' );
function wpse27638_add_rewrite()
{
add_rewrite_endpoint( 'gallery', EP_PERMALINK );
}
Next up we have to hack the endpoint system a bit because it doesn’t automatically work whens someone visits some-permalink/some-endpoint
: your new query variable (gallery
) would only contain a value when someone visits category/permalink/gallery/something
. No good. So we hook into request
. If our new gallery
query variable is set, we’ll just make it so the value is always set to true.
<?php
add_filter( 'request', 'wpse27638_request' );
function wpse27638_request( $vars )
{
if( isset( $vars['gallery'] ) ) $vars['gallery'] = true;
return $vars;
}
Next up, we need to hook into the_content
. If our new query var is set, we’ll return a gallery shortcode in place of the content. Otherwise, we’ll just return the content. You can remove your if else
statement from single.php
and just put in the_content
in its place.
<?php
add_filter( 'the_content', 'wpse27638_content_filter' );
function wpse27638_content_filter( $content )
{
if( ! is_singular() ) return $content;
if( get_query_var( 'gallery' ) )
{
return '';
}
else
{
return $content;
}
}
Only one finishing touch on our plugin. Add the new endpoint and flush the rewrite rules on activation. And flush the rewrite rules again on deactivation.
<?php
register_activation_hook( __FILE__, 'wpse27638_activation' );
function wpse27638_activation()
{
wpse27638_add_rewrite();
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'wpse27638_deactivation' );
function wpse27638_deactivation()
{
flush_rewrite_rules();
}
Here’s the only thing as a plugin (ready to use): https://gist.github.com/1191865