Wordpress пользовательский тип permalink, содержащий слиток таксономии

Я пытаюсь создать шаблон permalink для пользовательского типа, который включает одну из его таксономий. Название таксономии известно с самого начала (поэтому я не пытаюсь добавить или смешать все ее таксономии, только конкретную), но значение будет динамическим, конечно.

обычно пользовательский тип permalink строится с помощью rewrite arg с slug param, но я не вижу, как я мог бы добавить динамическую переменную в там.

http://codex.wordpress.org/Function_Reference/register_post_type

Я предполагаю, что требуется пользовательское решение, но я не уверен, какой лучший неинтрузивный подход будет.

есть ли известная практика для этого или кто-нибудь недавно построил что-то подобное? Я использую WP 3.2.1 кстати.

1 ответов


после поисков мне удалось создать довольно элегантное решение с помощью custom_post_link фильтр.

Допустим, у вас есть project пользовательский тип с client таксономии. Добавьте этот крюк:

function custom_post_link($post_link, $id = 0)
{
  $post = get_post($id);

  if(!is_object($post) || $post->post_type != 'project')
  {
    return $post_link;
  }
  $client = 'misc';

  if($terms = wp_get_object_terms($post->ID, 'client'))
  {
    $client = $terms[0]->slug;

    //Replace the query var surrounded by % with the slug of 
    //the first taxonomy it belongs to.
    return str_replace('%client%', $client, $post_link);
  }

  //If all else fails, just return the $post_link.
  return $post_link;
}

add_filter('post_type_link', 'custom_post_link', 1, 3);

затем, при регистрации пользовательского типа, установите rewrite arg вот так:

'rewrite' => array('slug' => '%client%')

думаю, я должен был копнуть глубже, прежде чем спрашивать, но, по крайней мере, теперь у нас есть полное решение.