2014-12-02 49 views
4

我正在使用wordpress。 我已經從管理員創建了頁面經銷商配置文件併爲其分配了模板。現在我想傳遞一個參數一樣wordpress將參數傳遞給自定義模板

SITE-URL/dealer-profile/SUV 

我已經添加以下到我.htaccess

RewriteRule ^dealer-profile/([a-zA-Z0-9_-]+)(|/)$ index.php?pagename=dealer-profile&dealer=$1 [QSA] 

我也曾嘗試以下

add_rewrite_rule('dealer-profile/([^/]+)', 'index.php?pagename=dealer- profile&dealer=$matches[1]', 'top'); 
flush_rewrite_rules(false); 

當我請求SITE-URL/dealer-profile/SUV,它會自動重定向到SITE-URL/dealer-profile

請建議,我錯了。

現在我做以下

function themeslug_query_vars($qvars) { 
    $qvars[] = 'dealer'; 
    return $qvars; 
} 
add_filter('query_vars', 'themeslug_query_vars' , 10, 1); 
function add_rewrite_rules($aRules) { 
    $aNewRules = array('dealer-profile/([^/]+)/?$' => 'index.php?pagename=dealer-profile&dealer=$matches[1]'); 
    $aRules = $aNewRules + $aRules; 
    return $aRules; 
} 
add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

但這是工作的數字只喜歡 - 測試/經銷商高調/ 234234 /工作 - 測試/經銷商高調/ 234234 /不工作

解決方案

編號:http://codex.wordpress.org/Class_Reference/WP_Rewrite

add_filter('rewrite_rules_array','my_insert_rewrite_rules'); 
add_filter('query_vars','my_insert_query_vars'); 
add_action('wp_loaded','my_flush_rules'); 
// flush_rules() if our rules are not yet included 
function my_flush_rules(){ 
    $rules = get_option('rewrite_rules'); 

    if (! isset($rules['(dealer-profile)/(.*)$'])) { 
     global $wp_rewrite; 
     $wp_rewrite->flush_rules(); 
    } 
} 

// Adding a new rule 
function my_insert_rewrite_rules($rules) 
{ 
    $newrules = array(); 
    $newrules['dealer-profile/(.*)$'] = 'index.php?pagename=dealer-profile&dealer=$matches[1]'; 
    return $newrules + $rules; 
} 

// Adding the id var so that WP recognizes it 
function my_insert_query_vars($vars) 
{ 
    array_push($vars, 'dealer'); 
    return $vars; 
} 

非常感謝您的幫助@@ jnhghy - Jantea Alexandri

+0

最後一行有一個錯字,2個URL(工作網址和不工作的URL)是相同的:test/dealer-profile/234234 /正在運行 - test/dealer-profile/234234 /請問corect那? – 2014-12-03 07:11:07

回答

3

您需要創建一個函數添加查詢變量來查詢字符串,然後勾該功能進入query_vars鉤:

function add_query_vars($aVars) { 
$aVars[] = "dealer-profile"; // represents the name of the variable that you want to pass 
} 

// hook add_query_vars function into query_vars 
add_filter('query_vars', 'add_query_vars'); 

那麼我們就需要添加重寫規則: 功能add_rewrite_rules($ aRules){

function add_rewrite_rules($aRules) { 
$aNewRules = array('dealer-profile/([^/]+)/?$' => 'index.php?pagename=dealer-profile=$matches[1]'); 
$aRules = $aNewRules + $aRules; 
return $aRules; 
} 

// hook add_rewrite_rules function into rewrite_rules_array 
add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

獲取變量:

if(isset($wp_query->query_vars['dealer-profile'])) { 
$sMsdsCat = urldecode($wp_query->query_vars['dealer-profile']); 
} 

,這應該做的伎倆, 這裏有一些額外的鏈接,「高級規則」: http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/ http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html

編輯:讓我們努力,我們有第二個文章中的步驟: 首先,讓我們創建的標籤,並把它添加到重寫規則(這應該爲字母數字值的工作:

function createRewriteRules() { 
    global $wp_rewrite; 

    // add rewrite tokens 
    $dealertag = '%dealertag%'; 
    $wp_rewrite->add_rewrite_tag($dealertag, '(.+?)', 'dealer-profile='); 

    $keywords_structure = $wp_rewrite->root . "dealer-profile/$dealertag/"; 
    $keywords_rewrite = $wp_rewrite->generate_rewrite_rules($keywords_structure); 

    $wp_rewrite->rules = $keywords_rewrite + $wp_rewrite->rules; 
    return $wp_rewrite->rules; 
} 
add_action('generate_rewrite_rules', 'createRewriteRules'); 

然後勾產生這樣的規則:

function add_rewrite_rules($wp_rewrite) 
{ 
     add_rewrite_rule('^dealer-profile/([^/]*)/?','index.php?page_id=12&dealer-profile=$matches[1]','top'); 
} 
add_action('generate_rewrite_rules', 'add_rewrite_rules'); 

添加變量來查詢瓦爾:

function query_vars($public_query_vars) { 
    $public_query_vars[] = "dealer-profile"; 
    return $public_query_vars; 
add_filter('query_vars', 'query_vars'); 

獎金: 要調試規則,你可以使用此功能:

function dev4press_debug_rewrite_rules() { 
    global $wp_rewrite; 
    echo '<div>'; 
    if (!empty($wp_rewrite->rules)) { 
    echo '<h5>Rewrite Rules</h5>'; 
    echo '<table><thead><tr>'; 
    echo '<td>Rule</td><td>Rewrite</td>'; 
    echo '</tr></thead><tbody>'; 
    foreach ($wp_rewrite->rules as $name => $value) { 
     echo '<tr><td>'.$name.'</td><td>'.$value.'</td></tr>'; 
    } 
    echo '</tbody></table>'; 
    } else { 
    echo 'No rules defined.'; 
    } 
    echo '</div>'; 
} 

https://docs.dev4press.com/tutorial/wordpress/debug-wordpress-rewrite-rules-matching/的,它應該告訴你一切你的規則以表格的形式存在,只要將它包含在你的任何模板中,並檢查上述函數是否正確添加了重寫規則,如果沒有,就應該給你一些額外的信息。 t什麼都沒有奏效。

你也可以使用衆所周知的Developer插件來檢查你的規則,你會得到這個插件的額外信息!

+0

感謝您的回覆,雖然這不起作用。 – 2014-12-03 05:36:14

+0

感謝您的回覆,雖然這不起作用。 http:// Siteurl /?pagename =經銷商資料 即使這不適用此規則。通常它直接工作。 – 2014-12-03 05:37:53

+0

我嘗試以下,這是工作 – 2014-12-03 05:53:59

相關問題