devi usare add_rewrite_rule
Qualcosa di simile:
add_action('init', 'theme_functionality_urls');
function theme_functionality_urls() {
/* Order section by fb likes */
add_rewrite_rule(
'^tus-fotos/mas-votadas/page/(\d)?',
'index.php?post_type=usercontent&orderby=fb_likes&paged=$matches[1]',
'top'
);
add_rewrite_rule(
'^tus-fotos/mas-votadas?',
'index.php?post_type=usercontent&orderby=fb_likes',
'top'
);
}
Questo crea /tus-fotos/mas-votadas
e /tus-fotos/mas-votadas/page/{number}
, che cambia l'orderby var query per uno personalizzato, che mi occupo nel filtro pre_get_posts.
È inoltre possibile aggiungere nuove variabili utilizzando i filtri query_vars
e aggiungendolo alla regola di riscrittura.
add_filter('query_vars', 'custom_query_vars');
add_action('init', 'theme_functionality_urls');
function custom_query_vars($vars){
$vars[] = 'api_action';
return $vars;
}
function theme_functionality_urls() {
add_rewrite_rule(
'^api/(\w)?',
'index.php?api_action=$matches[1]',
'top'
);
}
Poi, gestire la richiesta personalizzato:
add_action('parse_request', 'custom_requests');
function custom_requests ($wp) {
$valid_actions = array('action1', 'action2');
if(
!empty($wp->query_vars['api_action']) &&
in_array($wp->query_vars['api_action'], $valid_actions)
) {
// do something here
}
}
basta ricordarsi di svuotare le regole di riscrittura visitando /wp-admin/options-permalink.php
o chiamando flush_rewrite_rulessolo quando necessario, dato che non è un processo banale.
C'è una domanda simile a questa su 'wordpress.stackexchange.com'. http://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes – ckpepper02