1

だから私はここにWordpressページを持っています:

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

URL に 2 つの変数 (都市/州) を配置して、それらを操作できるようにしたいと考えています。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');

何が間違っているのかわかりません。親切に助けてください。

4

1 に答える 1

1

見逃した非常に重要なステップが 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_id次に、それらを検索しreal_estate_state_id、クエリ vars と page_request... で検索する必要があります。

于 2012-10-24T21:23:29.910 に答える