2016-04-02 94 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