自定义帖子类型

时间:2016-04-02 15:42:31

标签: wordpress custom-post-type advanced-custom-fields

我使用虚假页面为一个WordPress网站创建了一个系统,还有一些插件,如更多类型(用于自定义帖子类型),高级自定义字段和更多分类。该网站有一个关于乐队和发行的帖子类型。

前端的所有功能都非常好,如果用户想要阅读某个乐队,他会点击该菜单并最终到达/band/[bandname]。如果他想阅读有关释放的内容,他最终会在/band/[bandname]/releases/[releasename]

正如我所说,在前端一切正常。但是当我在后端创建一个版本时,我很难将/band/[bandname]部分添加到post类型发布的固定链接中。我尝试使用/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;

}

2 个答案:

答案 0 :(得分: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'])来执行自定义循环或类似的操作。

答案 1 :(得分: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;

}