[wp-hackers] Future of Web Design
Eddie O'Leary
eddie at teamcolab.com
Mon Nov 7 00:14:49 UTC 2011
Are any of you at the Future of Web Design conference this weekend in NYC?
Eddie O'Leary
Web Developer
CoLab Multimedia
-Sent from my iPhone
On Nov 5, 2011, at 7:54 PM, Mike Schinkel <mikeschinkel at newclarity.net> wrote:
> Hi Matthew:
>
> You're going to have to get your hands dirtier if you want more complex URL routing than /%post_type%/%post_name%/. :-)
>
> Minimally you'll need to use add_rewrite_rule() in the 'init' hook to tell WordPress to route the URL, and also hook both 'request' to validate the URL and 'post_type_link' to output the correct link format for the park features. To make it robust you probably also want to put in a plugin so you can do your flush_rewrite_rules() in the activation and deactivation hooks instead of putting flush_rewrite_rules() in the standard 'init' hooks.
>
> Anyway, it was probably too complicated to explain so I decided to code it up for you. You can find a working plugin developed for WP 3.3 here:
>
> https://gist.github.com/1342165
>
> Note I couldn't keep mmc_level1 and mmc_level2 post types straight during coding so I renamed them mmm_park and mmc_park_feature in my plugin.
>
> Hope this help.
>
> -Mike
> P.S. Just FYI I believe the WordPress URL routing is too much of a PITA so I posted a proof-of-concept for an alternative system on Trac several months ago (which admittedly doesn't yet address the more complex parts of the example I coded up for you):
>
> http://core.trac.wordpress.org/ticket/18276
>
> FWIW, my opinion regarding WordPress' URL routing is not fully shared by everyone on the hackers list. :-)
>
>
>
> On Nov 4, 2011, at 2:50 PM, Matthew McGarity wrote:
>
>>>
>>> Next question: You say "It doesn't work." The URL routing? If yes, what
>>> does your reqister_post_type() code look like?
>>>
>>
>> $labels = array(
>> 'name' => _x( 'Parks', 'mmc_level1' ),
>> 'singular_name' => _x( 'Park', 'mmc_level1' ),
>> 'add_new' => _x( 'Add New', 'mmc_level1' ),
>> 'add_new_item' => _x( 'Add New Park', 'mmc_level1' ),
>> 'all_items' => _x( 'Parks', 'mmc_level1' ),
>> 'edit_item' => _x( 'Edit Park', 'mmc_level1' ),
>> 'new_item' => _x( 'New Park', 'mmc_level1' ),
>> 'view_item' => _x( 'View Park', 'mmc_level1' ),
>> 'search_items' => _x( 'Search Parks', 'mmc_level1' ),
>> 'not_found' => _x( 'No Parks found', 'mmc_level1' ),
>> 'not_found_in_trash' => _x( 'No Parks found in Trash', 'mmc_level1' ),
>> 'parent_item_colon' => _x( 'Parent Park', 'mmc_level1' ),
>> 'menu_name' => _x( 'Parks', 'mmc_level1' ),
>> );
>>
>> $args = array(
>> 'labels' => $labels,
>> 'hierarchical' => true,
>> 'description' => '',
>> 'supports' => array( 'title', 'editor', 'author', 'revisions',
>> 'custom-fields', 'comments', 'thumbnail' ),
>> 'public' => true,
>> 'show_ui' => true,
>> 'show_in_menu' => 'mmc_menu',
>> 'show_in_nav_menus' => true,
>> 'publicly_queryable' => true,
>> 'exclude_from_search' => false,
>> 'has_archive' => false,
>> 'query_var' => true,
>> 'can_export' => true,
>> 'rewrite' => array( 'slug' => 'parks', 'with_front' => false ),
>> 'capability_type' => 'page'
>> );
>>
>> register_post_type( 'mmc_level1', $args );
>>
>> $labels = array(
>> 'name' => _x( 'Features', 'mmc_level2' ),
>> 'singular_name' => _x( 'Feature', 'mmc_level2' ),
>> 'add_new' => _x( 'Add New', 'mmc_level2' ),
>> 'add_new_item' => _x( 'Add New Feature', 'mmc_level2' ),
>> 'all_items' => _x( 'eatures', 'mmc_level2' ),
>> 'edit_item' => _x( 'Edit Feature', 'mmc_level2' ),
>> 'new_item' => _x( 'New Feature', 'mmc_level2' ),
>> 'view_item' => _x( 'View Feature', 'mmc_level2' ),
>> 'search_items' => _x( 'Search Features', 'mmc_level2' ),
>> 'not_found' => _x( 'No Features found', 'mmc_level2' ),
>> 'not_found_in_trash' => _x( 'No Features found in Trash', 'mmc_level2' ),
>> 'parent_item_colon' => _x( 'Parent Feature', 'mmc_level2' ),
>> 'menu_name' => _x( 'Features', 'mmc_level2' ),
>> );
>>
>> $args = array(
>> 'labels' => $labels,
>> 'hierarchical' => true,
>> 'description' => '',
>> 'supports' => array( 'title', 'editor', 'author', 'revisions',
>> 'custom-fields', 'comments', 'thumbnail' ),
>> 'public' => true,
>> 'show_ui' => true,
>> 'show_in_menu' => 'mmc_menu',
>> 'show_in_nav_menus' => true,
>> 'publicly_queryable' => true,
>> 'exclude_from_search' => false,
>> 'has_archive' => false,
>> 'query_var' => true,
>> 'can_export' => true,
>> 'rewrite' => array( 'slug' => 'features', 'with_front' => false ),
>> 'capability_type' => 'page'
>> );
>>
>> register_post_type( 'mmc_level2', $args );
>>
>> In the above code, I've been playing back and forth with the rewrite
>> argument, so I couldn't say I'm going down the right path with those.
>> Everything else seems standard.
>>
>> If not the URL routing, what exactly does not work?
>>
>>
>> The URL for the child post is
>> http://example.com/features/yosemite/half-dome/, not the desired
>> http://example.com/parks/yosemite/half-dome/. Both links lead to a 404
>> error.
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
More information about the wp-hackers
mailing list