J'ai écrit un plugin simple qui redirige les utilisateurs vers une page à une date donnée. (dans ce cas c'est pour le Blackout contre SOPA ici aux USA)
En ce moment, j'utilise la ligne wp_redirect(plugins_url( 'simple-sopa-blackout/blackout.php'),302 );
pour rediriger les utilisateurs à la date donnée.
Le problème est que cela crée une URL désagréable comme http://example.net/wp-content/plugins/simple-blackout/blackout.php
Il serait bien de créer simplement ceci http://example.net/blackout
En suivant ce que je pensais être le codex approprié , j'ai essayé ceci:
add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_action( 'wp_loaded','my_flush_rules' );
// flush_rules() if our rules are not yet included
function my_flush_rules(){
$rules = get_option( 'rewrite_rules' );
if ( ! isset( $rules['blackout/?$'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
$newrules = array();
$newrules['blackout/? $'] = plugins_url( 'simple-sopa-blackout/blackout.php');
return $newrules + $rules;
}
Toute aide serait géniale, la source complète est ici
MODIFIER:
Voici ce que j'ai maintenant, cela fonctionne si accéder à la page avec la requête vars index.php?blackout=stop-sopa
mais pas si je vais à blackout/stop-sopa
il semble aussi être en train de créer une boucle et expirer si la date est vraie
//create your rewrite rule
add_action( 'init', 'wpse38978_init' );
function wpse38978_init() {
add_rewrite_rule('blackout/(\d*)$', 'index.php?blackout=$matches[1]', 'top');
}
// add blackout to the whitelist of variables it wordpress knows and allows
function my_plugin_query_vars($query_vars) {
$query_vars[] = 'blackout';
return $query_vars;
}
add_filter('query_vars', 'my_plugin_query_vars');
function my_plugin_parse_request($wp) {
if (array_key_exists('blackout', $wp->query_vars)
&& $wp->query_vars['blackout'] == 'stop-sopa') {
include( dirname( __FILE__ ) . '/blackout.php' );
exit();
}
}
add_action('parse_request', 'my_plugin_parse_request');
if(!function_exists('wp_redirect')) {
require(ABSPATH . WPINC . '/pluggable.php');
}
$current_time = current_time('mysql', '0'); //get current blog time
$ts =strtotime($current_time); //parse the sql blog time to a php useable format
$check_date = date('m/d/Y', $ts); // put the date in a format we can check
$check_hour = date('H', $ts); // put the date in a format we can check
$blackout_day = "01/15/2012"; // should we black out the site?
$blackout_day_time_start = "08"; // when should we start (hour in 24 hour format)
$blackout_day_time_end = "20"; // should we black out the site?
if((!is_admin()) && ($check_date == $blackout_day && ($check_hour >= $blackout_day_time_start || $check_hour < $blackout_day_time_end))){
wp_redirect(get_bloginfo('url').'/blackout/stop-sopa',302 );
exit();
}
Je pense que cette réponse pourrait vous aider. Créez un modèle de page personnalisé dans votre plug-in, puis créez une page avec ce modèle appelé Blackout et redirigez les utilisateurs du plug-in vers cette page.
Aide de: Créer des modèles de page personnalisés avec des plugins?
Modifier avec un exemple de code:
Supposons que vous avez une page appelée Blackout, le slug est blackout
.
add_filter( 'page_template', 'your_custom_page_template' );
function your_custom_page_template( $page_template ) {
if ( is_page( 'blackout' ) ) {
$page_template = plugin_dir_path( __FILE__ ) . 'your-custom-page-template.php';
}
return $page_template;
}
Tant que vous pouvez obtenir le bon fonctionnement de la redirection quand il le devrait, le code ci-dessus doit fonctionner conjointement avec ce dernier pour afficher le modèle de page chaque fois que cette page est visitée. Maintenant, vous pouvez personnaliser your-custom-page-template.php
ou le nom que vous lui donnez depuis votre dossier plugins au lieu du thème.
Modifier, je travaille:
function blackout_redirect(){
$page = get_page_by_path( 'blackout' );
if( isset( $page ) && !is_null( $page ) ) {
if( !is_page( 'blackout' ) && !is_admin() /* && $check_date stuff */ ) {
wp_redirect( get_permalink( $page->ID ), 302 ); exit;
}
}
}
add_action( 'wp', 'blackout_redirect' );
function blackout_template() {
if( is_page( 'blackout' ) ) {
include plugin_dir_path( __FILE__ ) . 'blackout.php'; exit;
}
}
add_filter( 'template_redirect', 'blackout_template' );
Sur le thème Twenty Eleven, seuls quelques autres plugins sont actifs.
essayez ceci: (l'url devrait être http://site.com/blackout/anti-sopa )
//create your rewrite rule
add_action( 'init', 'wpse38978_init' );
function wpse38978_init() {
add_rewrite_rule('blackout/(\d*)$', 'index.php?blackout=$matches[1]', 'top');
}
// add blackout to the whitelist of variables it wordpress knows and allows
add_action( 'query_vars', 'wpse6891_query_vars' );
function wpse38978_query_vars( $query_vars )
{
$query_vars[] = 'blackout';
return $query_vars;
}
// If this is done, we can access it later
// This example checks very early in the process:
// if the variable is set, we include our page and stop execution after it
add_action( 'parse_request', 'wpse38978_parse_request' );
function wpse6891_parse_request( &$wp ){
if ( array_key_exists( 'blackout', $wp->query_vars ) && $wp->query_vars['blackout'] == 'anti-sopa') {
include( dirname( __FILE__ ) . '/blackout.php' );
exit();
}
}
if(!function_exists('wp_redirect')) {
require(ABSPATH . WPINC . '/pluggable.php');
}
$current_time = current_time('mysql', '0'); //get current blog time
$ts =strtotime($current_time); //parse the sql blog time to a php useable format
$check_date = date('m/d/Y', $ts); // put the date in a format we can check
$check_hour = date('H', $ts); // put the date in a format we can check
$blackout_day = "01/18/2012"; // should we black out the site?
$blackout_day_time_start = "08"; // when should we start (hour in 24 hour format)
$blackout_day_time_end = "20"; // should we black out the site?
if((!is_admin()) && ($check_date == $blackout_day &&($check_hour >= $blackout_day_time_start || $check_hour < $blackout_day_time_end))){
wp_redirect(get_bloginfo('url').'/blackout/anti-sopa',302 );
exit();
}