1

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

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

这是我的代码:

函数 eg_add_rewrite_rules() { 全局 $wp_rewrite;

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

$wp_rewrite->preg_index(2) 。'&位置='。$wp_rewrite->preg_index(3) 。'&habitaciones=' 。$wp_rewrite->preg_index(4) ); $wp_rewrite->规则 = $new_rules + $wp_rewrite->规则;

}

add_action('generate_rewrite_rules', 'eg_add_rewrite_rules');

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

它仍然可以工作。(原始 URL 将是 &habitaciones=)。

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

提前致谢!亚当

4

1 回答 1

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/

于 2012-05-03T10:55:17.757 回答