2010-04-01 5 views
0

J'ai un paramètre dans mon panneau d'options de thème pour permettre à l'utilisateur de changer le paramètre permaliens pour soutenir les URL conviviales. J'autorise seulement /% postname%/et /%postname%.html comme options. Je ne veux pas déclencher une réécriture htaccess chaque fois que quelqu'un accède à une page sur le site ou affiche les options de thème, donc j'essaye de coder ceci pour éviter cela.Fonction de permalien personnalisée. S'il vous plaît vérifier cette logique

J'ai un champ de saisie dans les options de thème qui s'appelle $ myTheme_permalinks. La valeur par défaut pour ceci est "/% postname% /" mais l'utilisateur peut également le changer en "/%postname%.html"

Voici le code en haut des options de thème pour gérer ce paramètre. Est-ce que cela semble sain?

if(get_option('myTheme_permalinks') =="/%postname%/" && get_option('permalink_structure') !== "/%postname%/" || !get_option('myTheme_permalinks')) 
{ 
    require_once(ABSPATH . '/wp-admin/includes/misc.php'); 
    require_once(ABSPATH . '/wp-admin/includes/file.php'); 
    global $wp_rewrite; 
    $wp_rewrite->set_permalink_structure('/%postname%/'); 
    $wp_rewrite->flush_rules(); 
    update_option('permalink_structure','/%postname%/'); 
    update_option('myTheme_permalinks','/%postname%/'); 
} 
else if (get_option('myTheme_permalinks') =="/%postname%.html" && get_option('permalink_structure') !== "/%postname%.html") 
{ 
    require_once(ABSPATH . '/wp-admin/includes/misc.php'); 
    require_once(ABSPATH . '/wp-admin/includes/file.php'); 
    global $wp_rewrite; 
    $wp_rewrite->set_permalink_structure('/%postname%.html'); 
    $wp_rewrite->flush_rules(); 
    update_option('permalink_structure','/%postname%.html'); 
} 

Répondre

0

Il n'est pas nécessaire de séparer les blocs de code pour ajouter le fichier .html. Vous pouvez faire quelque chose le long des lignes de:

$myThemePermalinks = get_option('myTheme_permalinks'); 
if (($myThemePermalinks =="/%postname%/" && get_option('permalink_structure') !== "/%postname%/" || !$myThemePermalinks) || ($myThemePermalinks == "/%postname%.html" && get_option('permalink_structure') !== "/%postname%.html")) { 

    if (preg_match('/\.html$/', $myThemePermalinks)) { 
     $ext = '.html'; 
    } else { 
     $ext = ''; 
    } 

    require_once(ABSPATH . '/wp-admin/includes/misc.php'); 
    require_once(ABSPATH . '/wp-admin/includes/file.php'); 
    global $wp_rewrite; 
    $wp_rewrite->set_permalink_structure('/%postname%/'.$ext); 
    etc..// . 
} 

Vous ne devez pas utiliser regex si vous ne voulez pas, mais vous voyez l'idée. Vous pouvez même raccourcir la condition en utilisant regex pour vérifier l'option .html.

Questions connexes