私はone国際化機能に取り組んでいます。それはsubdirで動作します。例えば、次のとおりです。eg.com/hello-world/en
このため、私はWPカスタムエンドポイントのEP_ALL
をサポートしています。
function lang_add_endpoints(){
add_rewrite_endpoint('en', EP_ALL);
add_rewrite_endpoint('de', EP_ALL);
}
add_action('init', 'lang_add_endpoints');
例えば:
eg.com/en
eg.com/page/en
eg.com/post(hello-world)/fr
eg.com/10/11/2018/de
and more...
それはうまくいっています。さて、クエリに"/en/ or /de/ or /any/"
がある場合、どうやって"en"
slug all WPリンクを追加できますか。
例えば:
私はCOOKIEを持っています。
if($_COOKIE['lang'] == 'en') :
<a href="eg.com/example/en" >Example</a>
<a href="eg.com/05/11/2018/en" >Example</a>
<a href="eg.com/category/news/en" >Example</a>
elseif($_COOKIE['lang'] == 'de') :
<a href="eg.com/05/11/2018/de" >Example</a>
<a href="eg.com/tags/computer/de" >Example</a>
endif;
リンクを生成するすべてのAPI関数には、出力を変更できるようにするためのフィルタがあります。これはそれらのほとんどをカバーする簡単な例です:
function wpd_endpoint_links( $url ){
if( isset( $_COOKIE['lang'] ) ){
$url = $url . $_COOKIE['lang'] . '/';
}
return $url;
}
add_filter( 'post_link', 'wpd_endpoint_links' );
add_filter( 'page_link', 'wpd_endpoint_links' );
add_filter( 'post_type_link', 'wpd_endpoint_links' );
add_filter( 'attachment_link', 'wpd_endpoint_links' );
add_filter( 'term_link', 'wpd_endpoint_links' );
add_filter( 'author_link', 'wpd_endpoint_links' );
add_filter( 'post_type_archive_link', 'wpd_endpoint_links' );
add_filter( 'day_link', 'wpd_endpoint_links' );
add_filter( 'month_link', 'wpd_endpoint_links' );
add_filter( 'year_link', 'wpd_endpoint_links' );