4

I want to modify the rewrite rules for a custom post type, tribe_events, which is registered as a post type within "The Events Calendar" core plugin files (the-events-calendar.class line 24):

    protected $postTypeArgs = array(
        'public' => true,
        'rewrite' => array('slug' => 'event', 'with_front' => false),
        'menu_position' => 6,
        'supports' => array('title','editor','excerpt','author','thumbnail', 'custom-fields'),
        'capability_type' => array('tribe_event', 'tribe_events'),
        'map_meta_cap' => true
    );

What I would like to do is modify the line:

        'rewrite' => array('slug' => 'event', 'with_front' => false)

To:

'rewrite' => array('slug' => 'event/%lugares%', 'with_front' => false)

Where "%lugares%" is the name of a custom taxonomy.

Then my plan is to use the following function to complete the rewrite process:

add_filter('post_type_link', 'events_permalink_structure', 10, 4);
function events_permalink_structure($post_link, $post, $leavename, $sample)
{
    if ( false !== strpos( $post_link, '%lugares%' ) ) {
        $lugares_term = get_the_terms( $post->ID, 'lugares' );
        $post_link = str_replace( '%lugares%', array_pop( $lugares_term )->slug, $post_link );
    }
    return $post_link;
}

The issue is that I don't want to modify the core plugin files. Is there a way to modify the custom post type rewrite argument in a seperate function from inside my theme's functions.php??

Thanks!

1 Answer 1

2

Yes, I believe you can. Paste this code into your theme's functions.php file:

function change_tribe_events_rewrite_rules() {
    global $wp_post_types;
    $rewrite = &$wp_post_types['tribe_events']->rewrite;
    $rewrite['slug'] = 'event/%lugares%';
}
add_action( 'init', 'change_tribe_events_rewrite_rules', 999 );
2
  • 1
    Make sure that you give this a later priority than the original post type is registered with
    – Pippin
    Nov 30, 2012 at 1:30
  • @Pippin - Thanks - I've updated the hook for the latest possible priority
    – shea
    Nov 30, 2012 at 2:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.