WordPress を CMS のようなブログ プラットフォームとして使用して、Web サイトを構築しています。カスタム投稿タイプとカスタム分類法を多用しました。最後になりましたが、WPML プラグインを使用して多言語化しました。
CPT 宣言の間、文字列とスラッグをラップしgettext
て、WPML 内で翻訳できるようにしました。
CPT 宣言の例は次のとおりです。
register_post_type('rooms',
array(
'label' => __('Rooms','valletta'),
'description' => __('','valletta'),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => __('rooms','valletta')),
'query_var' => true,
'exclude_from_search' => false,
'menu_position' => 25,
'supports' => array('title','editor','excerpt','custom-fields','comments',),
'taxonomies' => array('features','typology',),
'labels' => array (
'name' => __('Rooms','valletta'),
'singular_name' => __('room','valletta'),
'menu_name' => __('Rooms','valletta'),
'add_new' => __('Add room','valletta'),
'add_new_item' => __('Add New room','valletta'),
'edit' => __('Edit','valletta'),
'edit_item' => __('Edit room','valletta'),
'new_item' => __('New room','valletta'),
'view' => __('View room','valletta'),
'view_item' => __('View room','valletta'),
'search_items' => __('Search Rooms','valletta'),
'not_found' => __('No Rooms Found','valletta'),
'not_found_in_trash' => __('No Rooms Found in Trash','valletta'),
'parent' => __('Parent room','valletta'),
)
)
);
ご覧のとおり、スラッグ用語もラップしましたが、これは (私にとって) 完全に理にかなっています。私が達成したかったのは、ユーザーがイタリア語の「標準」Web サイトにアクセスすると、/camere/nome-camera/ を介して部屋の CPT ページに到達し、英語のユーザーは /rooms/room-name/ を介して取得することでした。これはイタリア語でスムーズに機能し、WPML は英語版のスラッグも正しく翻訳するため、イタリア語の Web サイトでルーム CPT を表示しているときに英語版に切り替えると、WordPress が /rooms/ に移動し、唯一の問題が発生します。 404 を示します。
WPML の Web サイトを確認したところ、スラッグの翻訳はまだ進行中であり、プラグインの次のバージョンでおそらくリリースされる機能であることを認めています。OK、それは大丈夫です。
私が達成しようとしているのは、WPML の更新がプラグインである間に使用するハックです。私の考えは、.htaccess にいくつかのカスタム書き換えルールを設定し、それらの CPT ページの URL を書き換えることです。スラッグ翻訳を削除して、両方の言語に単一のスラッグを作成し、誰かが入力すると翻訳されたスラッグが代わりに「標準」スラッグを取得するという書き換えルールを作成できると考えましたが、少なくとも内容は正しいです。ブラウザはページをリダイレクトせずに URL を書き換えるだけなので、ユーザーは何も気付かないでしょう。
問題は、どうすればこれをすべて行うことができるかということです。スラッグ翻訳を削除することは問題ありません。WPML バックエンドで削除するだけですが、書き換えルールなどにあまり慣れていないので、目標を達成するのを手伝ってくれる人を探しています。最終的には、達成するためのより良い方法を示します。私には必要です (そして、私のアイデアが理にかなっているかどうかにかかわらず、当然フィードバックがあります)。
私が何かを逃した場合は申し訳ありません。さらに情報が必要な場合は、私が提供します。