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() { global $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->rules = $new_rules + $wp_rewrite->rules;

}

add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );

今、私はhabitacionesをオプションにしたいと思っています。次の URL を入力すると: 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 に答える