Je crée un plugin Wordpress qui crée des pages (avec get_header()
, get_footer()
et get_sidebar()
) pour la recherche via une API.
Bien sûr, j'ai défini certaines règles pour la réécriture d'URL comme ceci:
function init() {
global $wp_rewrite;
add_rewrite_rule('my_plugin/(.+)/results?', 'index.php?my_plugin=results&data=$matches[1]', 'top');
...
$wp_rewrite->flush_rules();
}
Cette fonction est appelée avec cette ligne dans le constructeur de mon plugin:
add_action('init', array(&$this, 'init'));
Le plug-in fonctionne parfaitement, mais je dois activer manuellement la réécriture des URL dans Paramètres> Permaliens de mon tableau de bord d'administration. Il me suffit de sélectionner une option: Jour et nom , Mois et nom , Numérique ,... (peu importe).
Le problème est que, lorsque j’installe le plug-in sur un nouveau Wordpress avec des permaliens, désactiver ( par défaut ), je reçois toujours une erreur 404 . Cela ne fonctionnera que si j'active manuellement les liens permanents.
(Je sais que cela se fait par . Htaccess ).
Y at-il un moyen de contourner cela ou d'activer automatiquement Permalinks via mon plugin?
Une autre bonne solution est la bienvenue.
J'espère que ma question est claire.
Je vous remercie.
Chaque fois que je crée un plug-in pour lequel des permaliens doivent être activés, je vérifie l'activation du plug-in et, si ce n'est pas le cas, j'affiche un message pour l'utilisateur:
// Add Check if permalinks are set on plugin activation
register_activation_hook( __FILE__, 'is_permalink_activate' );
function is_permalink_activate() {
//add notice if user needs to enable permalinks
if (! get_option('permalink_structure') )
add_action('admin_notices', 'permalink_structure_admin_notice');
}
function permalink_structure_admin_notice(){
echo '<div id="message" class="error"><p>Please Make sure to enable <a href="options-permalink.php">Permalinks</a>.</p></div>';
}
J'ai trouvé le code.
modify_permalinks('/%postname%/','','');
function modify_permalinks($permalink_structure, $category_base, $tag_base){
global $wp_rewrite;
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/misc.php');
# get paths
$home_path = get_home_path();
$iis7_permalinks = iis7_supports_permalinks();
# set the structure
$permalink_structure = preg_replace('#/+#', '/', '/' . $permalink_structure);
$wp_rewrite->set_permalink_structure($permalink_structure);
$category_base = preg_replace('#/+#', '/', '/' . $category_base);
$wp_rewrite->set_category_base($category_base);
$tag_base = preg_replace('#/+#', '/', '/' . $tag_base);
$wp_rewrite->set_tag_base($tag_base);
# check if there is a file to rewrite
if ( $iis7_permalinks ) {
if ( ( ! file_exists($home_path . 'web.config') && win_is_writable($home_path) ) || win_is_writable($home_path . 'web.config') )
$writable = true;
else
$writable = false;
} else {
if ( ( ! file_exists($home_path . '.htaccess') && is_writable($home_path) ) || is_writable($home_path . '.htaccess') )
$writable = true;
else
$writable = false;
}
# flush the rules
update_option('rewrite_rules', FALSE);
$wp_rewrite->flush_rules($writable);
}