2016-04-02 132 views
0

我已經爲使用假頁面的WordPress網站以及更多類型(用於自定義帖子類型),高級自定義字段以及更多分類法等插件創建了一個系統。該網站有樂隊和發佈的帖子類型。Custom custom permalink for custom post type

在前端一切都很好,如果用戶想讀一個樂隊,他點擊菜單,並在/band/[bandname]結束。如果他想讀一篇關於釋放他最終在/band/[bandname]/releases/[releasename]

正如我所說的,在前端一切正常。但是當我在後端創建一個發行版時,我很難將/band/[bandname]部分添加到帖子類型發佈的永久鏈接。我嘗試使用/band/%band%/releases/,但%band%將按照字面意思編寫,因爲它不知道從哪裏獲取樂隊名稱。有任何想法嗎?

我試過使用這段代碼。 Band是發佈提交表單中的發佈對象輸入。

add_filter('post_type_link', 'custom_permalinks', 10, 3); 

function custom_permalinks($permalink, $post, $leavename) 

{ 

$post_id = get_post_meta($_POST['band'], 'bands', true); 

if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) 
return $permalink; 
$var1 = get_post_meta($post_id, 'bands', true); 

$var1 = sanitize_title($var1); 


$permalink = str_replace('%band%', $var1, $permalink); 

return $permalink; 

} 

回答

0

通過做一些小的調整,我得到了它的工作良好。我增加了以下永久規則我releases類型:/band/%band%/releases/

然後我創造了這個在永久替代變量%band%

add_filter('post_type_link', 'custom_permalinks', 10, 3); 

function custom_permalinks($permalink, $post, $leavename) 

{ 
$post_id = $post->ID; 

if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) 
return $permalink; 
$var1 = get_the_title(get_post_meta($post_id, 'band', true)); 

$var1 = sanitize_title($var1); 


$permalink = str_replace('%band%', $var1, $permalink); 

return $permalink; 

} 
1

你可以做這樣的:

<?php 

add_filter('rewrite_rules_array','customRewriteRules'); 
add_filter('query_vars','customRewriteVars'); 

// Remember to flush_rules() when adding rules 

add_filter('init','flushRules'); 

function flushRules(){ 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
} 


// Adding a new rule 
function customRewriteRules($rules) 
{ 
    $newrules = array(); 
    $newrules['bands-page/([^/]+)/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]&customvar2=$matches[2]'; 
    $newrules['bands-page/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]'; // pagename could be band/ 
    $finalrules = $newrules + $rules; 
     return $finalrules; 
} 

function customRewriteVars($vars) 
{ 
    array_push($vars, 'customvar1', 'customvar2'); 
    return $vars; 
} 

的查詢瓦爾只要你想你可以通過儘可能多的,然後使用VAR($ _ GET [「customvar1」])做自定義循環或類似的東西。

+0

相當接近我做了什麼。但是,當我獲得更多的子類別時,當我嘗試在編輯器中鏈接到它們時,會有點麻煩。他們的風格不瞭解固定鏈接。所以當我鏈接到發行版時,它不知道樂隊名稱。 – janlindso

+0

對每個頁面加載沖洗規則是一個壞主意。 –

+0

這就是我評論它的原因。該過濾器只應在添加新規則時運行。 – Alberto