web-dev-qa-db-fra.com

Comment forcer par programme des permaliens personnalisés avec mon thème?

Je fais un thème personnalisé. C'est un thème hautement spécialisé pour faire de WordPress une application plutôt qu'un système de gestion de contenu ou un blog. Par exemple, un système de planification de cabinet dentaire (avec les fonctionnalités CMS et widget), à titre d'exemple.

Comme mon thème a besoin de jolies URL pour fonctionner correctement, le fichier .htaccess doit être créé par défaut uniquement lorsque quelqu'un définit Permalinks sur Custom (puis entre quelque chose comme% postname%). Comment puis-je déclencher cela dans WordPress, par programme, afin qu'il crée cela? Je veux dire, je pourrais probablement écraser le fichier moi-même lors de l'activation du thème, mais le mieux serait d'utiliser l'API WordPress pour cela.

2
Volomike

Pour activer pleinement les liens permanents, vous devez également vous assurer que .htaccess est également créé. Pour ce faire, vous devez définir une option et vider les règles avec un booléen.

global $wp_rewrite; 

//Write the rule
$wp_rewrite->set_permalink_structure('/%postname%/'); 

//Set the option
update_option( "rewrite_rules", FALSE ); 

//Flush the rules and tell it to write htaccess
$wp_rewrite->flush_rules( true );

Si vous utilisez ceci dans un plugin, il doit être dans le hook init, not le hook load. Si c'est dans le hook load, il générera une erreur disant que $wp_rewrite est null.

Important: Vous devriez aussi avoir un conditionnel afin qu'il ne soit défini qu'une fois. (Vous pouvez créer une option et vérifier si elle est définie, sinon, vous exécutez ce code permalien et définissez cette option)

Je vérifie aussi généralement si c'est du côté administrateur et ne l'exécute que si c'est le cas.

2
Don Rhummy
function change_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}
add_action('init', 'change_permalinks');

Vous n'aurez peut-être pas besoin du crochet d'action si vous le collez dans le code de votre fonction d'activation de thème.

J'ai aussi constaté que cela ne fonctionnait que très peu. Vous devez toujours cliquer sur la page de paramètres Permalinks pour que ce fichier .htaccess soit créé. Alors que faire? Eh bien, j'ai découvert que je pouvais utiliser un IFRAME qui chargeait automatiquement cette page à partir du panneau d'options de mon thème, puis il créerait ce fichier .htaccess pour moi.

<iframe style="position:absolute;top:-5000px" src="<?= site_url() ?>/wp-admin/options-permalink.php"></iframe>
4
Volomike