Wie erstelle ich ein benutzerdefiniertes Plugin Permalink

Ich habe ein einfaches Plugin geschrieben , das die Benutzer auf eine Seite an einem bestimmten Datum umleitet. (In diesem Fall ist es für den Blackout gegen SOPA hier in den USA)

Im Moment verwende ich die Zeile wp_redirect(plugins_url( 'simple-sopa-blackout/blackout.php'),302 ); um die Benutzer am angegebenen Datum umzuleiten.

Das Problem ist, dass es eine böse URL wie http://example.net/wp-content/plugins/simple-blackout/blackout.php Es wäre großartig, einfach http://example.net/blackout zu machen

Ich folge dem, was ich dachte, war der richtige Codex Ich habe das versucht:

 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; } 

Jede Hilfe wäre großartig, die vollständige Quelle ist hier

BEARBEITEN:

Hier ist, was ich jetzt habe, funktioniert es, wenn Sie auf die Seite mit der Abfrage vars index.php?blackout=stop-sopa zugreifen index.php?blackout=stop-sopa aber nicht, wenn ich zu blackout/stop-sopa gehe es scheint auch eine Schleife zu erstellen und das Datum zu timing out ist wahr

  //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(); } 

Solutions Collecting From Web of "Wie erstelle ich ein benutzerdefiniertes Plugin Permalink"

Ich denke, diese Antwort könnte dir helfen. Erstellen Sie eine benutzerdefinierte Seitenvorlage in Ihrem Plugin und erstellen Sie dann eine Seite mit der Vorlage namens Blackout, und leiten Sie die Nutzer im Plugin auf diese Seite weiter.

Hilfe von: Erstellen Sie benutzerdefinierte Seitenvorlagen mit Plugins?

Mit Codebeispiel bearbeiten:

Angenommen, Sie haben eine Seite namens Blackout, die 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; } 

Solange Sie die Weiterleitung richtig funktionieren lassen können, sollte der obige Code in Verbindung mit ihm funktionieren, um die Seitenvorlage anzuzeigen, wenn diese Seite besucht wird. Jetzt können Sie your-custom-page-template.php oder was auch immer Sie nennen es in Ihrem Plugins-Ordner anstelle des Themas anpassen.

Bearbeiten, ich habe das funktioniert:

 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' ); 

Im Twenty Eleven-Theme sind nur ein paar andere Plugins aktiv.

versuchen Sie Folgendes: (Die URL sollte http://site.com/blackout/anti-sopa sein )

 //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(); }