web-dev-qa-db-fra.com

Réseau multisite: Modifiez la structure du lien permanent sur les nouveaux blogs

J'ai un réseau multisite de sous-domaine. J'ai implémenté un système afin de créer de nouveaux sous-domaines par programme, en remplissant simplement un formulaire.

Maintenant, j'ai un besoin: quand un nouveau blog est créé, j'aimerais définir sa structure de lien permanent sur/postname /.

J'ai essayé ces solutions:

Comment définir la structure de lien permanent via functions.php

function set_default_permalink_for_new_blogs($blog_id) 
{
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action('wpmu_activate_blog', 'set_default_permalink_for_new_blogs');

J'ai ajouté cet extrait dans le fichier functions.php du thème utilisé pour le site principal, où se trouve le système mentionné ci-dessus. Cela ne fonctionne tout simplement pas.

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

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

Cet extrait me préoccupe un peu: je ne pense pas que ce soit une bonne idée de lancer la réécriture sur chaque "init" (une autre personne a également exprimé des doutes à ce sujet dans des commentaires); en deuxième lieu, cet extrait doit être placé sur le thème par défaut des nouveaux blogs - mais que se passe-t-il si je souhaite changer le thème par défaut à l'avenir?

Merci beaucoup pour toutes les suggestions,

Marco

1
Marco Panichi

Avec un "mu-plugins", la solution est ...

add_action( 'wpmu_new_blog', function( $blog_id ){

switch_to_blog( $blog_id );
global $wp_rewrite;
$wp_rewrite->set_permalink_structure('/%postname%/');
$wp_rewrite->flush_rules();
restore_current_blog();

}, 10 );
3
José Machado

Vous devriez pouvoir créer un plug-in mu (plug-in requis) qui se déclenche sur le hook activate_blog. Quelque chose comme cela devrait vous aider à démarrer dans la bonne direction:

<?php
/* Plugin name: WPSE Permalink Setter
Description: Sets permalink structure for each blog activation
*/
add_action('activate_blog', 'wpse_271662_set_permalinks');
function wpse_271662_set_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}
?>

Etant donné que le code ne s'exécute que lors de la création d'un nouveau site (activate_blog), cela évite les problèmes de performances associés à l'exécution sur toutes les init et ne dépend pas d'un thème. Bien sûr, en théorie, les administrateurs de site pourraient changer la structure de permalink ultérieurement, mais cela leur donnerait une installation propre avec la structure de permalien souhaitée, à moins qu'ils ne se mêlent de cette structure.

Placez ce fichier directement dans /wp-content/mu-plugins/ (aucun sous-dossier semblable aux plug-ins normaux) pour qu'il s'exécute automatiquement à moins que le fichier ne soit supprimé.

1
WebElaine