web-dev-qa-db-fra.com

Comment déclencher une action avec une URL

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

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:
1
znat

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