2016-08-05 101 views
0

我正在嘗試更改?category = [name]的所有實例,並在我的網址中添加「info」。在我的.htaccess,我試圖把這個重寫規則後關於索引(BEGIN WordPress和END WordPres註釋中):WordPress .htaccess重寫規則

RewriteRule ^info$ ?category=$1 [NC,L] 

所以基本上,如果我們有www.example.com/bill/?category=test ,它應該改爲www.example.com/bill/info,或者更好,只要將它替換爲沒有更好的,那麼www.example.com/bill。無論哪種方式工作。

雖然我確實需要獲取該類別變量。如果這會導致錯誤,那麼像www.example.com/bill/test這樣的東西是可以接受的,只要這仍然可以讓我抓住php中的類別變量。

回答

1

不幸的是,.htaccess文件不會做你想做的事情,關於這個作爲WordPress變量的工作。但是,有一個WordPress重寫系統(處理永久鏈接的系統)。這將允許您使用類似https://www.example.com/bill/test的URL,並將「測試」分配給一個變量。

我還建議添加重寫規則檢查器插件(https://wordpress.org/support/view/plugin-reviews/rewrite-rules-inspector),因爲它可以幫助您更好地瞭解正在進行的操作並驗證您的功能是否正在生效。

您需要做的第一件事是註冊一個新的查詢變量。您可以添加多個。他們只會添加到像/bill/<billCategory>/<billSomething>這樣的網址。你需要確保你遠離可能衝突的名字。不幸的是,這些都沒有很好的記錄。

function add_bill_arguments($public_query_vars) 
{ 
    $public_query_vars[] = 'billCategory'; 
    return $public_query_vars; 
} 

add_filter('query_vars', 'add_bill_arguments'); 

接下來,您將不得不添加您的重寫規則。這將告訴WordPress在/bill/處「停止」,並將所有後續內容分配給您設置的查詢變量。

function bill_rewrite() 
{ 
    add_rewrite_rule('^bill/([^/]*)/?', 'index.php?pagename=bill&billCategory=$matches[1]', 'top'); 
} 

add_action('init', 'bill_rewrite'); 

現在,你擁有了這些之後,就可以得到你的變量是這樣的...

global $wp_query; 

if(is_page('bill')) 
{ 
    if (isset($wp_query->query_vars['billCategory'])) 
     $billCategory = $wp_query->query_vars['billCategory']; 

    echo $billCategory; 
} 

一旦你加入你的重寫(S),你需要刷新重寫規則。最簡單的方法是進入管理員並訪問設置 - >固定鏈接。然後點擊保存按鈕。當頁面重新加載時,再次執行。偶爾重寫卡住了。如果你安裝了我上面提到的插件,你可以檢查確保它們在那裏。

希望這會幫助你開始正確的方向。

+0

非常感謝您花時間給我留下這樣詳細的答案!我不明白你的第二個代碼blurb,關於add_rewrite_rule。你爲什麼指定index.php?我的網址中沒有index.php。我也不認爲我需要pagename變量,因爲使用這個變量的頁面實際上使用了一個自定義的單個.php模板。 –

+0

WordPress中的所有內容都通過 /index.php。這就是它在重定向中指定的原因。如果您仍然希望WP加載其他所有內容,您將需要它以這種方式工作。您還應該將代碼與佈局分開。如果您在模板中添加這樣的功能,您將無法切換模板並仍然使用您的功能。考慮通過'shortcode'或模板覆蓋來運行你的代碼。 –