J'écris un plugin qui doit déclencher une action basée sur les URL. Le schéma d'URL est le suivant:
mywordpresssite.com/action/12345
où 12345
est un code unique utilisé par la fonction déclenchée. Ma question est comment puis-je déclencher une fonction dans le plugin basée sur un tel lien?
EDITMerci aux réponses ci-dessous, j’ai écrit les 3 fonctions suivantes, mais je n’ai pas encore ce que je veux. ajouter_
function add_endpoint(){
error_log('add_endpoint');
add_rewrite_endpoint( 'action', EP_ROOT );
}
add_action('init', 'add_endpoint', 0);
function add_query_vars($vars){
error_log("query");
$vars[] = 'action';
return $vars;
}
add_filter('query_vars', add_query_vars, 0);
function sniff_requests(){
global $wp;
error_log("request sniffed:".$wp->query_vars['action']);
}
add_filter('parse_request', sniff_requests, 0);
Et le journal indique que toutes les fonctions sont déclenchées, mais il ne parvient pas à afficher $wp->query_vars['action']
. Je suppose que la règle de réécriture n’est pas reconnue par le système:
[26-Aug-2013 22:22:35 UTC] add_endpoint
[26-Aug-2013 22:22:35 UTC] query
[26-Aug-2013 22:22:35 UTC] request sniffed:
Comme @toscho dit que vous avez besoin d'un terminal.
Le code de note est non testé .
/**
* Flush rewrite rules
*/
function install_my_plugin() {
my_plugin_endpoint();
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'install_my_plugin' );
/**
* Flush rewrite rules
*/
function unistall_my_plugin() {
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'unistall_my_plugin' );
/**
* Add the endpoint
*/
function my_plugin_endpoint() {
add_rewrite_endpoint( 'action', EP_ROOT );
}
add_action( 'init', 'my_plugin_endpoint' );
function my_plugin_proxy_function( $query ) {
if ( $query->is_main_query() ) {
// this is for security!
$allowed_actions = array('123', '124', '125');
$action = $query->get('action');
if ( in_array($action, $allowed_actions) ) {
switch ( $action ) {
case '123' :
return call_user_func('function_123');
case '124' :
return call_user_func('function_124');
case '125' :
return call_user_func('function_125');
}
}
}
}
add_action( 'pre_get_posts', 'my_plugin_proxy_function' );