私は成功しないで一見単純なパーマリンク構造のカスタマイズを達成しようとしてきました。目標は、可能な各固定リンクの前に常に/aa-bb/
を置くことです。ここで、aaは言語コード、bbは国コードです。これ以降の動作は通常どおりに動作します。ですから、あなたが通常/post-title/
を持っていたところで、その後は/en-gb/post-title/
を持っていれば同じ投稿になるでしょう(ページ、CPT、アーカイブ、カテゴリ、検索などのすべてのバリエーションを含む).
完全な流れ:
WPパーマリンクを書き換えるためのすべての方法は、この目標とは少し異なる動作をするようです。これはhtaccessを使ったほうがよいでしょうか。 WPMLは彼らの言語コードでうまくいっているようですが、どうやっていいのかわかりません。
Add_rewrite_ruleを使用してもうまくいきますが、一度に1つのパーマリンクタイプしかカバーしないので、すべてのバリエーションを手動で追加するのでは不十分になるのが怖いのです。
私は今同じような解決策に取り組んでいます - ウェブサイトはすべてのURL(デフォルト言語を除く)に言語コードを持たなければなりません、しかしWPML/Polylangプラグインがそうする方法で翻訳可能なページだけです。ニュース(ブログ)については、特定の言語で投稿を表示するだけです(それらは別々であり、お互いの翻訳ではありません)。他のすべてのコンテンツはすべての言語で混在しています。また、UIもURLから設定された言語で表示されます。
これらの書き換え規則に言語コードを追加するために私がしたことは次のとおりです。
function prepend_default_rewrite_rules( $rules ) {
// Prepare for new rules
$new_rules = [];
// Set up languages, except default one
$language_slugs = ['ar', 'ku'];
// Generate language slug regex
$languages_slug = '(?:' . implode( '/|', $language_slugs ) . '/)?';
// Set up the list of rules that don't need to be prefixed
$whitelist = [
'^wp-json/?$',
'^wp-json/(.*)?',
'^index.php/wp-json/?$',
'^index.php/wp-json/(.*)?'
];
// Set up the new rule for home page
$new_rules['(?:' . implode( '/|', $language_slugs ) . ')/?$'] = 'index.php';
// Loop through old rules and modify them
foreach ( $rules as $key => $rule ) {
// Re-add those whitelisted rules without modification
if ( in_array( $key, $whitelist ) ) {
$new_rules[ $key ] = $rule;
// Update rules starting with ^ symbol
} elseif ( substr( $key, 0, 1 ) === '^' ) {
$new_rules[ $languages_slug . substr( $key, 1 ) ] = $rule;
// Update other rules
} else {
$new_rules[ $languages_slug . $key ] = $rule;
}
}
// Return out new rules
return $new_rules;
}
add_filter( 'rewrite_rules_array', 'prepend_default_rewrite_rules' );
十分にテストしていません - WP_Rewriteクラスを検討した後に解決策を思いついたのです。それは進行中の作業です。それが役立つことを願っています。
P.S .:また、「URLから値を取得して言語/国=完全を判断する」というあなたの解決策を見てうれしいです - それが私が現在取り組んでいるものです:)
polylang plugin を使うことができると思います。あなたがそのプラグインで述べたように私は私のプロジェクトの1つを作りました。