2012-08-26 11 views
6

Por mi propia cordura Estoy intentando crear una ruta para una API Ajax que se ve algo como:¿Cómo creo una 'ruta' en wordpress?

/api/<action> 

me gustaría wordpress para manejar esta ruta y delegar a la acción apropiada con do_action. ¿WordPress me da un gancho para implementar esto? ¿Dónde hay un buen lugar?

+0

Hay una pregunta similar a esta en 'wordpress.stackexchange.com'. http://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes – ckpepper02

Respuesta

1

Parece que está buscando wordpress json-api plugin, que es uno de los plugins muy bien construidos que he usado, también muy fácilmente extensible. Buena suerte.

10

usted tiene que utilizar add_rewrite_rule

Algo así como:

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

} 

Esto crea /tus-fotos/mas-votadas y /tus-fotos/mas-votadas/page/{number}, que cambia el OrdenarPor var query para uno personalizado, que yo manejo en el filtro pre_get_posts.

También se pueden agregar nuevas variables usando los filtros query_vars y agregarlo a la regla de reescritura.

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

} 

Entonces, manejar la petición de encargo:

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 

    } 

} 

Sólo recuerde para eliminar las reglas de reescritura visitando /wp-admin/options-permalink.php o llamando flush_rewrite_rulessólo cuando sea necesario, ya que no es un proceso trivial.

+0

Aquí está la solución real y completa de wordpress: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule –

+0

¿No es esa la misma URL utilizada en la primera parte de mi respuesta? – davidmh

+0

Lo siento, pero compartí lo que funcionó para mí para que pueda ayudar a cualquier otro en el futuro :) –