カスタム投稿タイプを手動で登録する場合、WordPressでは個別のアーカイブスラッグを設定できます。この設定方法によって、スラッグがセカンダリ言語に翻訳されるかどうかが決まります。
カスタム投稿タイプを手動で登録する場合、has_archive関数を使用して個別のアーカイブスラッグを設定できます。
WPMLでは、has_archiveに文字列を設定できます。ただし、文字列の値がrewrite['slug'],以外に設定されている場合、またはカスタム投稿タイプの名前のスラッグが設定されていない場合、アーカイブスラッグは翻訳できません。
翻訳可能なスラッグの設定
このコード例では、
'has_archive' => trueを設定します。スラッグのbookがスペイン語でlibroに翻訳されていると仮定すると、アーカイブリンクは次のようになります。
- 英語(デフォルト言語): http://mydomain.tld/book/
- スペイン語(セカンダリ言語): 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')
)
);
}
デフォルト言語とセカンダリ言語での同じスラッグの設定
このコード例では、パラメータ'has_archive' => 'my-books'に特定の文字列を設定します。これにより、アーカイブリンクは次のようになります。
- 英語(デフォルト言語): http://mydomain.tld/my-books/
- スペイン語(セカンダリ言語): 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')
)
);
}
カスタマイズ可能なスラッグのトラブルシューティング
一部のテーマやプラグインでは、サイト管理者がカスタム投稿タイプやカスタムタクソノミーにカスタムスラッグを設定できます。
翻訳されたカスタムスラッグが404エラーを返す場合は、以下を確認してください。
- カスタムタイプは、言語ごと、フロントエンド、バックエンド、AJAX、Heartbeatなど、すべてのリクエストにわたって常に同じスラッグで登録する必要があります。したがって、
'rewrite' => [ 'slug' => $my_custom_slug ],において、$my_custom_slugの値は、オプション(または任意のカスタム設定)からのものであっても、リクエストごとに変更してはなりません。 - WPMLは、(カスタムタイプの登録時の)カスタムスラッグの翻訳のみをサポートしており、カスタムパーマリンク構造はサポートしていません。
- カスタムスラッグがオプションとして保存されている場合、
wpml-config.xmlファイルのadmin-textsとして登録しないでください。 - カスタムスラッグの値を更新した後、テーマやプラグインは(
flush_rewrite_rules();を呼び出して)リライトルールをフラッシュする必要があります。