allow BOTH post slug and meta key value in permalink for custom post type

I found some good information here http://codex.wordpress.org/Plugin_API/Filter_Reference/request

I added a filter to the request hook like so:

add_filter( 'request', 'alter_the_query' );

The hook function goes like this:

function alter_the_query( $request ) {

    $dummy_query = new WP_Query();  // the query isn't run if we don't pass any query vars
    $dummy_query->parse_query( $request );

    // if requesting a schedule and no posts are found with existing query vars, try the meta query
    if ( $request['post_type'] == 'schedule' && !$dummy_query->have_posts() ) {
        $posts = get_posts( array(
            'post_type' => 'schedule',
            'meta_query' => array(
                array(
                    'key' => 'wsb_schedule_id',
                    'value' => $request['schedule'],
                )
            ),
        ) );

        if ( count( $posts ) == 0 ) return $request;    // no posts found still so return the request as is for normal processing

        // a post was found, so fix the request vars and return the modified $request object for further processing
        $request['schedule'] = $posts[0]->post_slug;
        $request['name'] = $posts[0]->post_slug;
    }

    return $request;

}

My hook function runs the request with a locally scoped WP_Query object and if no schedules were returned, it tries the meta query. If the meta query succeeds, it makes the necessary modifications to the $request array and then lets WordPress continue to process. If the meta query fails, it just returns the $request unmodified for normal processing once again.

I’m not sure how this will play out with permissions on the schedule, but that’s a different ball of wax.