[wp-hackers] Options for Controller - Views

Mike Schinkel mikeschinkel at newclarity.net
Fri Nov 20 16:55:28 UTC 2009

On Nov 20, 2009, at 11:17 AM, Otto wrote:
> On Fri, Nov 20, 2009 at 9:29 AM, Mike Schinkel
>> Yes it is a nasty, dirty, ugly hack.  In order to get something as simple as an arbitrary URL to route requires use of the follow hooks (directly from my plugin):
>>                add_action('template_redirect',array(__CLASS__,'custom_url'));
>>                add_action('generate_rewrite_rules', array(__CLASS__,'add_rewrite_rules'));
>>                add_filter('query_vars', array(__CLASS__,'add_queryvars' ));
>>                register_activation_hook(__FILE__,array(__CLASS__,'flush_rewrite_rules');
>>                add_action('pre_get_posts',array(__CLASS__,'set_query'));
>>                add_action('parse_query',array(__CLASS__,'parse_query'));
>>                add_filter('the_content',array(__CLASS__,'filter_post_list_content'));
>>                add_filter('posts_fields',array(__CLASS__,'filter_posts_fields'));
>>                add_filter('posts_where_paged',array(__CLASS__,'filter_posts_where_paged'));
>>                add_filter('posts_join_paged',array(__CLASS__,'filter_posts_join_paged'));
>>                add_filter('posts_orderby',array(__CLASS__,'filter_posts_orderby'));
>>                add_filter('posts_groupby',array(__CLASS__,'filter_posts_groupby'));
>> It is total crap that you have to use so many hooks to get the path "/products/{product}" to work and that your hooks have to much with fragile SQL.
> Sweet Jebus, man. Why in the *world* would you need all that?

To create a generic functionality that lets me add URLs like what follows and have them load appropriate functionality from WordPress such as a post or a list of posts:

add_custom_url(	array(
	'name' 					=> 'solutions-list-by-alpha',
	'url_type'			=> 'post-list',
	'url_template' 	=> 'solutions/by-alpha',
	'template_file' => 'custom/solutions-by-alpha.php',
	'mf_page_type'	=> 'Solution',

add_custom_url(	array(
	'name' 					=> 'solution-page',
	'url_type'			=> 'single-post',
	'url_template' 	=> 'solutions/{solution_slug}',
	'template_file' => 'custom/solution.php',
	'mf_page_type'	=> 'Solution',

add_custom_url(	array(
	'name' 					=> 'solutions-list',
	'url_type'			=> 'post-list',
	'url_template' 	=> 'solutions',
	'template_file' => 'custom/solutions.php',
	'mf_page_type'	=> 'Solution',

add_custom_url(	array(
	'url_template' 	=> 'test',
	'callback' 			=> 'do_test_page',

function do_test_page() {
	echo 'Hi!';

> Unless you're doing something completely absurd, I have no idea why
> you need all those hooks. Heck, all the posts_* hooks your using have
> absolutely nothing to do with rewriting or routing of the resulting
> page. Those modify the WP_Query only.

You know, I thought the same until I tried to make it work. I spent a week coding that and every time I got close it seemed like WordPress was actively trying to thwart me.

I also had to kill these which I hated but it was too much to overcome and I didn't have time to do it "right":

			remove_action('template_redirect', 'redirect_canonical');
			remove_action('template_redirect', 'wp_old_slug_redirect');

The reason I needed to muck with SQL is because, while I could get the URLs to route with just a few hooks, I couldn't get it to select the appropriate posts and/or post lists (I was using More Fields plugin to create unique "content types.")  Yes, it's not exactly a routing issue but without the route being able to access WP functionality to pull the appropriate posts then just having custom URL routes is like having a Bugatti Veyron but no gasoline. 

Listen, if you really can make this work easier, and I mean really work, I'm all for you proving me wrong (but you won't in this case, I'm certain of it.) OTOH, if core can be modified so that a route can be specified and tied to a custom post type and/or a custom function all without having to do anything more than specify what I have specified above then that is what we need.

-Mike Schinkel
WordPress Custom Plugins

More information about the wp-hackers mailing list