2012-08-26 69 views
6

對於我自己的理智,我試圖創建一個AJAX API看起來像一個路線:如何在wordpress中創建'路線'?

/api/<action> 

我想WordPress的處理這條路線,並委託與do_action適當的行動。 wordpress會給我一個鉤子來實現這個嗎?一個好地方在哪裏?

+0

在wordpress.stackexchange.com上有類似的問題。 http://wordpress.stackexchange.com/questions/26388/how-to-create-custom-url-routes – ckpepper02

回答

1

好像你正在尋找wordpress json-api插件,這是我用過的很好的插件之一,也很容易擴展。好運。

10

你必須使用add_rewrite_rule

喜歡的東西:

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

} 

這將創建/tus-fotos/mas-votadas/tus-fotos/mas-votadas/page/{number},改變了排序依據查詢VAR爲一個自定義的,這是我在pre_get_posts過濾處理。

也可以使用query_vars過濾器添加新變量並將其添加到重寫規則中。

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

} 

然後,處理自定義請求:

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 

    } 

} 

只要記住訪問/wp-admin/options-permalink.php或需要只有當,因爲它不是一個簡單的過程調用flush_rewrite_rules刷新重寫規則。

+0

下面是WordPress的實際和完整的解決方案:https://codex.wordpress.org/Rewrite_API/add_rewrite_rule –

+0

與我的迴應的第一個sencente使用的是不是相同的URL嗎? – davidmh

+0

對不起,但我分享了什麼爲我工作,以便它可以幫助其他任何未來:) –