web-dev-qa-db-ja.com

すべてのURLを書き換える

パーマリンクとURLの書き換えについて質問があります。私は翻訳プラグインを書いています、そして私は私のURLに言語のショートコードを追加したいと思います(何か http://eyewebz.com/EN/other_permalinks )。現在私は現在選択されている言語を保持するために$ _Session変数を割り当てていますが、これは実際にはユーザーには見えません。

私は以下のコードでURLを書き換えることができますが、URLを変更した後、ページにはコンテンツが表示されず、グローバル$ post-variableは完全に空になります。コードは以下の通りです。

function alter_link_language($permalink)
{
    $active_language = get_user_selected_language();
    $current_language_shortcode = strtoupper( $active_language["shortname"] );

    $permalink = str_replace(get_bloginfo('home'), '', $permalink);
    return get_bloginfo('home') . '/' . $current_language_shortcode . $permalink;
}
add_filter('post_link', 'alter_link_language', 10);
add_filter('page_link', 'alter_link_language', 10);

誰かがこの方法で私を手助けすることができればそれは大歓迎です!

前もって感謝します!

6

私が知っているURIベースをパーマリンクの前に付けて、同時にWordPressを幸せに保つための良い方法はありません。ただし、add_rewrite_endpoint()を使用してURIの末尾に言語を追加できます。

add_action('init', 'foobar_rewrite_tag');
function foobar_rewrite_tag(){
     $languages = array('en', 'sp'); // Probably have this sourced from your plugin options
     foreach($languages as $language)
         add_rewrite_endpoint( $language, EP_PERMALINK | EP_PAGES);
}

あなたはあなたのテンプレートでこのような単純なgetter関数を使うことができます:

function get_language_code(){
    global $wp_query;
    $languages = array('en', 'sp'); //Source this from your plugin options
    foreach($languages as $language)
        if(isset($wp_query->query_vars[$language])) //Note this will not have a value assigned, so we check if it's set to determine the language
             return $language;
}

パーマリンクは次のようになります。

  1. http://domain.com/page-name/en
  2. http://domain.com/page-name/sp

私はそれがあなたが望むものと正確に同じではないことを知っています、しかしそれはWordPressをこの種のアプローチのために悩ます最も簡単な方法です。

参照: http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

4
Brian Fegter