Custom Post Slug collapse with Page Slug in WordPress

Changing permalink on WordPress it's never, well at least it never gave me any headache, but when I change /blog/%postname%/ to just /%postname%/ some pages fell apart, and I was blaming the .htaccess, deleting it, recreating, let WordPress rebuild it, did a flush_rewrite_rules(); and nothing was fixed. Then I notice it was all the custom post slug that matches the page slug.

The site had three custom post, Films, Stories, Galleries, also for each custom post there is a page with the same name and slug which had a custom template, but I enter to thesite.com/films, thesite.com/stories or thesite.com/galleries it did not serve the right template, so I change thesite.com/films to thesite.com/filmz and it did work and serve the right template.

By seeing this behavior it has to be the custom post and his rewrite fault, this is part of the custom post:

<?php
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => true,
'show_in_nav_menus' => false,
'exclude_from_search' => false,
'hierarchical' => false,
'menu_position' => 20,
'rewrite' => array('slug'=>'films'),
'supports' => array('title''thumbnail'),
'show_in_nav_menus' => true

There is three solution to this:

Solution #1

Change the slug, but this is a wrong solution if you already had theses indexed.

Solution #2

Change 'has_archive'=> true to false and the /films would be ignore by the custom post.

Solution #3

Do not use the custom page, and customize the archive-{$post_type}.php file and forget about the specific page for each one.