WPMLはさまざまな言語のカスタムコンテンツが独自のURLを持つことを可能にします。 これには投稿スラグの翻訳およびカスタム投稿タイプ名が含まれます。
カスタム投稿タイプのURLは投稿タイプとページ名を含みます。 通常、異なる言語のカスタム投稿タイプは以下のように見えます:
- /houses/my-green-house/
- /casas/mi-casa-verde/
URLの太字の最初の部分が投稿タイプです。 2番目のタイプがページ名です。
ページ名を翻訳するには、post editorのパームリンクフィールドの横にある Edit ボタンをクリックします。 WPMLはそれぞれの言語に異なる投稿を使用するため、別々の名前に設定することができます。
カスタム投稿タイプの名前を翻訳
カスタム投稿タイプ名をWPMLで翻訳するには、ストリング翻訳モジュールが必要です。
PHPでカスタム投稿タイプを宣言する
PHPを通してカスタム投稿を手動で登録する場合、WPMLはこれらのコールを捉え、スラグを翻訳用に翻訳します。
Typesでカスタム投稿タイプと宣言する
PHPなしでカスタム投稿タイプを定義するには、Types pluginをご使用いただけます。 Typesはカスタム投稿タイプを自動的に特定し、これらをWPMLで翻訳できるようにします。
Typesへ行き、カスタム投稿タイプを編集します。 名前の翻訳が有効になっていない場合、WPMLの設定画面のリンクを探します:
WPMLでカスタム投稿名ローカリゼーションを有効にする
次に WPML -> 設定ページを開きます。 スラグローカリゼーション用の新しいセクションが見えます。
カスタム投稿タイプ名ローカリゼーションを有効にする際のチェックリスト:
1. カスタム投稿タイプを translatableにします
2. サイトのスラグ翻訳を有効にします
3. 言語別に異なるスラグを使用するを選択します
カスタム投稿タイプ名翻訳の準備ができました。 翻訳を入力し、保存を押すとこれらがURLに表示されます。
カスタム投稿タイプアーカイブの翻訳
カスタム投稿タイプを手動で登録する時、WordPressでは以下のような特殊なアーカイブスラグを設定します:
has_archive
3.2バージョンではWPMLは has_archive
をストリングに設定できます。 しかしながら、ストリング値が rewrite['slug'],
に設定されていない、またはCPTネームスラグが設定されていない場合、 アーカイブスラグは翻訳可能になりません。
コード例 1:
このコード例では、 'has_archive' => true
を設定しました。 スラグブックがスペイン語でlibroに翻訳されるとすると、アーカイブリンクは以下のようになります:
- 英語 (デフォルト言語): http://mydomain.tld/book/
- スペイン語 (第2言語): http://mydomain.tld/es/libro/
add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'book', array( 'labels' => array( 'name' => __( 'Books', 'textdomain' ), 'singular_name' => __( 'Book', 'textdomain' ) ), 'public' => true, 'has_archive' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array('slug' => 'book'), 'supports' => array('title','editor', 'custom-fields','thumbnail') ) ); }
コード例 2:
このコード例では、 'has_archive' => 'my-books'
.パラメーターに特定のストリングを設定しました。 アーカイブリンクは以下のようになります:
- 英語 (デフォルト言語): http://mydomain.tld/my-books/
- スペイン語 (第2言語): http://mydomain.tld/es/my-books/
add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'book', array( 'labels' => array( 'name' => __( 'Books', 'textdomain' ), 'singular_name' => __( 'Book', 'textdomain' ) ), 'public' => true, 'has_archive' => 'my-books', // Do not use the gettext functions for this parameter 'publicly_queryable' => true, 'exclude_from_search' => false, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array('slug' => 'book'), 'supports' => array('title','editor', 'custom-fields','thumbnail') ) ); }