web-dev-qa-db-ja.com

特定のURLにカスタムテンプレートを使用する

私は単純な二言語サイトを構築しています。私は投稿にPolylangを使用しています。また、 "Artist"というカスタム投稿タイプもあります。バックエンドで簡単にするために、私はPolylangを使用していません。各アーティストの言語用のカスタムフィールドはいくつかあります。

Site.com/artist/johnny-cashを読み込むと、テーマにsingle-artist.phpテンプレートを使用しています。問題は、たとえばsite.com/en/artist/johnny-cashのように、ロードしたときにカスタムテンプレートをどのようにロードするのかということです。

だから基本的に、これ:

site.com/artist/johnny-cash - > load single-artist.php(素晴らしい)

site.com/en/artist/johnny-cash - >カスタムテンプレートにリダイレクトする方法

1
Nacho

コメントの@Miloのおかげで、私は私の答えを投稿するつもりです:

最初にこのルールを追加しました:

add_rewrite_rule(  
    "en/artist/([^/]+)/?",  
    'index.php?pagename=post_type=artist&artist=$matches[1]&gal_template=en',
    "top"); 

それからこのフィルタ:

add_filter( 'query_vars', 'gal_query_vars' );
function gal_query_vars( $query_vars )
{
    $query_vars[] = 'gal_template';
    return $query_vars;
}

最後に、単一のテンプレートをフィルタリングしました。

add_filter( 'single_template', 'get_custom_post_type_template' );
function get_custom_post_type_template($single_template) {
     global $post;

     if ($post->post_type == 'artist') {

            $q = get_query_var('gal_template');

            if ($q === 'en') {
                $single_template = dirname( __FILE__ ) . '/single-artist-en.php';
            }


     }
     return $single_template;
}

それからsingle-artist-en.phpで私はしました:

get_template_part('single-artist')

しかし、あなたは必要なことなら何でもすることができます。

2
Nacho