web-dev-qa-db-fra.com

Réécrire chaque URL

J'ai une question concernant les permaliens et la réécriture des URL. Je suis en train d'écrire un plugin de traduction et j'aimerais ajouter le shortcode de langue dans mon url (quelque chose comme http://eyewebz.com/EN/other_permalinks ). Actuellement, j'attribue une variable $ _Session pour conserver la langue actuellement sélectionnée, mais celle-ci n'est pas vraiment visible pour les utilisateurs.

Je suis capable de réécrire l'URL avec le code ci-dessous, mais après avoir modifié l'URL, la page ne montre aucun contenu et la variable globale $ post est complètement vide. Le code est ci-dessous.

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);

Si quelqu'un pouvait m'aider de façon judicieuse avec celui-ci, ce serait grandement apprécié!

merci d'avance!

6

Il n’est pas un bon moyen de prévoir un permalien avec une base d’URI que je connaisse et de garder WordPress heureux en même temps. Vous pouvez cependant ajouter la langue à la fin de l'URI avec add_rewrite_endpoint();

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);
}

Vous pouvez utiliser une fonction de lecture simple comme celle-ci dans vos modèles:

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;
}

Vos permaliens ressemblent à ceci:

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

Je sais que ce n’est pas exactement ce que vous souhaitez, mais c’est le moyen le plus simple d’affronter WordPress pour ce type d’approche.

Référence: http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

4
Brian Fegter