2012-04-27 59 views
1

我試圖重寫以下URL在WP: http://www.example.com/?compra=arriendo&propertytype=apartamentos&location=bogota&habitaciones=2-habitacionesWordPress的URL重寫 - 可選值

到: http://www.viveya.co/arriendo/apartamentos/bogota/2-habitaciones

這是我的代碼:

功能eg_add_rewrite_rules(){ global $ wp_rewrite;

$new_rules = array(
    '(.+)/(.+)/(.+)/(.*)/?$' => 'index.php?compra=' . $wp_rewrite->preg_index(1) . '&propertytype=' . 

$ wp_rewrite-> preg_index(2)。 '& location ='。 $ wp_rewrite-> preg_index(3) 。 '& habitaciones ='。 $ wp_rewrite-> preg_index(4) ); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules;

}

ADD_ACTION( 'generate_rewrite_rules', 'eg_add_rewrite_rules');

現在,我想向城市顯示是可選的。所以,如果我輸入以下URL: http://www.viveya.co/arriendo/apartamentos/bogota/

它仍然會工作。 (原始URL將爲& habitaciones =)。當城市顯示爲空

我的代碼不能正常工作。我不知道爲什麼。我的正則表達式有什麼問題?

在此先感謝! 亞當

+0

爲什麼您沒有在[WPSE](http://wordpress.stackexchange.com/)上發佈此信息的具體原因? – scribu 2012-05-03 10:56:49

回答

1

這是不是可以用正則表達式來解決。

你需要使用PHP解析URL段。

$segments = explode('/', $url); 

$query = array(); 

while ($segments) { 
    $part = array_shift($segments); 

    if (in_array($part, array('taxonomy1', 'taxonomy2', ...)) { 
    $query[ $part ] = array_shift($segments); 
    } 
} 

編輯:概念的未經檢驗的證明好吧,我想你也可以使用正則表達式,但你需要爲每一個可選值的附加重寫規則:

function eg_add_rewrite_rules() { 
    global $wp_rewrite; 

    $new_rules = array(
     'event/(industry|location)/(.+)/(industry|location)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4), 
     'event/(industry|location)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) 
    ); 
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; 
} 
add_action('generate_rewrite_rules', 'eg_add_rewrite_rules'); 

來源:http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/

+0

非常感謝,爲每個可選值添加了額外的重寫規則!! :) – AdamGold 2012-05-04 12:26:49