2012-10-24 41 views
1

所以我有一個WordPress的頁面在這裏:WordPress URL地址重寫

http://12.ourgreenville.com/real_estate/

我希望能夠把在URL中兩個可變(城市/州),然後與他們合作 。一個URL應該是這樣的:

http://12.ourgreenville.com/real_estate/1/2/

請讓我知道需要什麼。我把你的代碼的functions.php爲 如下:

function add_rewrite_rules($wp_rewrite) 
{ 
    $new_rules = array(
        '('.$template_page_name.')/real_estate/(.*?)/?([0-9]{1,})/?$' =>'index.php?p=5351city='.$wp_rewrite->preg_index(1).'&state='.$wp_rewrite->preg_index(2) 
       ); 

$wp_rewrite->rules = $new_rules + $wp_rewrite->rules; 
} 
add_action('generate_rewrite_rules', 'add_rewrite_rules'); 

function query_vars($public_query_vars) { 

    $public_query_vars[] = "city"; 
    $public_query_vars[] = "state"; 
    return $public_query_vars; 
} 
add_filter('query_vars', 'query_vars'); 

我不知道我在做什麼wrong.kindly幫我做。

回答

1

您錯過了一個非常重要的步驟 - 刷新規則以激活對它們的更改。這是我的工作變型與適應你的情況:

add_action('init', 'prefix_attach_page_rules'); 
add_filter('query_vars', 'prefix_attach_page_query_vars'); 
add_action('parse_request', 'prefix_attach_page_request'); 

function prefix_attach_page_rules() 
{ 
    add_rewrite_rule('^' . urlencode(get_option('non_latin_data')) . '/(\d+)/(\d+)/?$', 'index.php?prefix_view=my_special_id&prefix_city_=$matches[1]&prefix_state=$matches[2]', 'top'); 


    flush_rewrite_rules(); // IMPORTANT 
} 

function prefix_attach_page_query_vars($query_vars) 
{ 
    $query_vars[] = 'prefix_city'; 
    $query_vars[] = 'prefix_state'; 
    return $query_vars; 
} 

function prefix_attach_page_request(&$wp) 
{ 
    // If the page request is really from our rewrite url 
    if(!array_key_exists('prefix_view', $wp->query_vars)) 
     return; 

    $city= $wp->query_vars['prefix_city']; 
    $state = $wp->query_vars['prefix_state']; 

    // we are on the rewrite rule 
    exit; // in case very custom page like include 
} 

前綴,在程序執行的情況下,你是非常重要的。你可以放置任何你喜歡的東西,但它可以讓你逃避重複常見名字的情況。

使用選擇的動作或過濾器您不應該使用您的動作或過濾器,但重要的是使您的規則具有更高的優先級(頂部)並刷新規則。

prefix_attach_page_rules會告訴WordPress的爲我們的規則

prefix_attach_page_request時parsing_request在這種情況下,由給定的查詢瓦爾會做我們的工作。

還有另一個StackOverflow:WordPress Answers - 專注於WordPress,你也可以在那裏找到許多解決方案。

附加(基於註釋鏈路上的正則表達式):

add_rewrite_rule('^real_estate/(\d+)/(\d+)/?$', 'index.php?prefix_view=real_estate&real_estate_city_id=$matches[1]&real_estate_state_id=$matches[2]', 'top'); 

那麼你應該尋找他們real_estate_city_idreal_estate_state_id查詢瓦爾和page_request ...

+0

感謝Rolice,但問題是,我完全遵循你的代碼,但仍然得到404錯誤。當我打http://12.ourgreenville.com/real_estate/1/2/。請幫助我。 –

+0

@JahanZaibAslam,你可以進行一些調試,在cetain點處回顯或死掉php,例如,三個函數中每一個都有什麼:'prefix_attach_page_query_vars' - 示例die(print_r($ wp)),'prefix_attach_page_request' - 例如die(print_r($ wp))。這是非常可能的,然後正則表達式對於想要的情況無效 - 請參閱上面的帖子的編輯添加。你是否啓用了固定鏈接? – Rolice