2012-08-26 4 views
6

Per la mia sanità mentale che sto cercando di creare un percorso per un'API Ajax che sembra qualcosa di simile:Come si crea un "percorso" in wordpress?

/api/<action> 

mi piacerebbe wordpress per gestire questo percorso e delegare l'azione corretta con do_action. Wordpress mi dà un gancio per implementare questo? Dov'è un buon posto?

+0

C'è una domanda simile a questa su 'wordpress.stackexchange.com'. http://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes – ckpepper02

risposta

1

Sembra che tu stia cercando il plugin per wordpress json-api, che è uno dei plugin ben costruiti che ho usato, anche facilmente estensibile. Buona fortuna.

10

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.

+0

Ecco la soluzione attuale e completa di wordpress: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule –

+0

Non è lo stesso URL usato sulla prima sencente della mia risposta? – davidmh

+0

Scusami amico, ma ho condiviso ciò che ha funzionato per me in modo che possa aiutare qualsiasi altro in futuro :) –