Wie routet man ein Permalink auf eine Funktion?

Da ich momentan arbeitsbedingt sehr viel mit CodeIgniter zu tun habe und das Routing Model sehr nett finde, kam bei mir die Frage auf, ob es mögliche wäre dies in WordPress zu realisieren.

Der Ansatz war natürlich über add_rewrite_rules(), jedoch fehlte mir dann eine Datei, die den Permalink weiterverarbeiten würde. WordPress hat bereits diese gewünschte Datei, jedoch denkt man im Normalfall bei Ihr eher an Javascript, es handelt sich um die admin-ajax.php. Diese PHP-Datei ist dazu da, um Javascript Ajax Anfragen zu verarbeiten und Funktionen auszuführen die vorher über add_action(‘wp_ajax_…’) bzw. add_action(‘wp_ajax_no_priv_…’) registriert wurden.

add_rewrite_rule( 'call/([0-9a-zA-Z_-]+)?$', 'wp-admin/admin-ajax.php?action=$1', 'top' );

Mit dieser Zeilen leiten wir alle Anfragen von ‘http://example.com/call/do_something’ auf ‘http://example.com/wp-admin/admin-ajax.php?action=do_something’ um. Wenn wir also die Funktion ‘do_something’ angelegt haben und sie via ‘add_action(‘wp_ajax_do_something’, ‘do_something’)’ oder ‘add_action(‘wp_ajax_no_priv_do_something’, ‘do_something’)’ eingebunden haben, rufen wir sie über ‘http://example.com/call/do_something’ direkt auf.

Hier der entsprechende Code:

/*
Plugin Name: Permalink Function Routing
Plugin URI:
Description: Map a permalink to a function
Version: 0.1
Author: Ralf Hortt
Author URI: http://me@horttcore.de
*/
 
// Add rewrite rule and flush on plugin activation
function hc_rh_plugin_activate() {
	hc_rh_plugin_rewrite();
	flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hc_rh_plugin_activate' );
 
// Flush on plugin deactivation
function hc_rh_plugin_deactivate() {
	flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hc_rh_plugin_deactivate' );
 
// Create new rewrite rule
function hc_rh_plugin_rewrite() {
	add_rewrite_rule( 'call/([0-9a-zA-Z_-]+)?$', 'wp-admin/admin-ajax.php?action=$1', 'top' );
}
add_action( 'init', 'hc_rh_plugin_rewrite' );
 
// Testfunction
function do_something()
{
	die('I did something');
}
add_action('wp_ajax_do_something', 'do_something');
add_action('wp_ajax_no_priv_do_something', 'do_something');

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Kommentare zeigen