スラッグ保存時に強制的に大文字にすることは可能ですが、内部的に想定されていない文字列が入ることになりますので、上手く表示できないと思います。(もっとコードを追えば出来る可能性はありますが)
PHP
1/* 表示できないがスラッグに大文字を許す方法 */
2function my_wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
3 if ( preg_match( '/([A-Z])/', $original_slug ) ) {
4 $slug = $original_slug;
5 }
6 return $slug;
7}
8add_filter( 'wp_unique_post_slug', 'my_wp_unique_post_slug', 10, 6 );
9function filter_handler( $data , $postarr ) {
10 $data[ 'post_name' ] = $postarr[ 'post_name' ];
11 return $data;
12}
13add_filter( 'wp_insert_post_data' , 'filter_handler' , 99, 2 );
14/* 表示できないがスラッグに大文字を許す方法 */
URLに大文字を使うことは実はそのまま出来ます。例えば example.com/a
と言うページがある場合、example.com/A
でもアクセスできると思います。それを利用して、大文字のURLを組んでしまう方法が手早いと思います。
PHP
1/* 大文字を使いつつスラッグはいじらない方法(考え方のみ) */
2function my_a_to_z_wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
3 if ( preg_match( '/([A-Z])/', $original_slug ) ) {
4 // ここで $slug と $original_slug を post_meta とかに保存
5 }
6 return $slug;
7}
8add_filter( 'wp_unique_post_slug', 'my_a_to_z_wp_unique_post_slug', 10, 6 );
9function permalink_change_post( $permalink, $post, $leavename ) {
10 return $permalink; // ここで大文字のものに変える(post_meta に入っているもので置換)
11}
12add_filter( 'post_link', 'permalink_change_post', 10, 3 );
13/* 大文字を使いつつスラッグはいじらない方法(考え方のみ) */
【wp_insert_post_dataについて | hacknote】
http://hacknote.jp/archives/16990/
【WP関数『wp_insert_post』に含まれるフィルターフック3つ | sand a lot Web & Music Create [札幌]】
http://www.sandalot.com/wp関数『wp_insert_post』に含まれるフィルターフック3つ/
【WordPress の投稿スラッグを自動的に生成する | Simple Colors】
http://www.warna.info/archives/2317/
【URLのカテゴリ階層をカスタマイズしてフラットなURLにする | Webエンジニアブログ】
http://dim5.net/wordpress/category-hierarchy-flat-url.html