WordPress URL重写 - 可选值

时间:2012-04-27 17:53:59

标签: wordpress rewrite

我正在尝试在WP中重写以下网址: http://www.example.com/?compra=arriendo&propertytype=apartamentos&location=bogota&habitaciones=2-habitaciones

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

这是我的代码:

  

function eg_add_rewrite_rules(){       全球$ 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->规则;

     

}

     

add_action('generate_rewrite_rules','eg_add_rewrite_rules');

现在,我希望habitaciones是可选的。所以如果我输入以下网址: http://www.viveya.co/arriendo/apartamentos/bogota/

它仍然可以使用。 (原始网址为& habitaciones =)。

当habitaciones为空时,我的代码不起作用。我不知道为什么。我的正则表达式出了什么问题?

提前致谢! 亚当

1 个答案:

答案 0 :(得分: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/