Кастомный slug для пользовательского типа записи с автором

9 дек. 2011 г., 21:02:42
Просмотры: 14K
Голосов: 8

Привет и спасибо за прочтение.

Я хочу добавить имя автора в slug моего пользовательского типа записи.

Пример: http://example.com/charts/%author%/

Есть идеи, как это реализовать?

Вот мой пользовательский тип записи:

register_post_type('charts', array(
  'label' => 'Charts',
  'description' => '',
  'public' => true,
  'show_ui' => true,
  'show_in_menu' => true,
  'capability_type' => 'post',
  'hierarchical' => false,
  'rewrite' => array('slug' => '/charts/author'),
  'query_var' => true,
  'supports' => array(
    'title',
    'editor',
    'trackbacks',
    'custom-fields',
    'comments',
    'author',
  ),
  'labels' => array ( 
    'name' => 'Charts',
    'singular_name' => 'Charts',
    'menu_name' => 'Charts',
    'add_new' => 'Add Charts',
  ),
));

С уважением, jnz

0
Все ответы на вопрос 1
1

Я нашел решение и решил поделиться им, потому что быть добрым - это приятно. Этот вариант работает у меня и основан на решении от Джонатана Бринли. Если у кого-то есть предложения или исправления, пожалуйста, дайте мне знать.

Сначала создайте свой пользовательский тип записи и настройте его следующим образом (это всего лишь пример, не забудьте адаптировать его под свои нужды. Настройка slug важна!):

register_post_type('charts', array( 
  'label' => 'Что угодно',
  'description' => '',
  'public' => true,
  'show_ui' => true,
  'show_in_menu' => true,
  'capability_type' => 'post',
  'hierarchical' => true,
  'rewrite' => array('slug' => '/что-угодно/%author%'),
  'query_var' => true,
  'supports' => array(
    'title',
    'editor',
    'trackbacks',
    'custom-fields',
    'comments',
    'author'
  ) 
));

Затем настройте функцию для вашего фильтра (в functions.php):

function my_post_type_link_filter_function($post_link, $id = 0, $leavename = FALSE) {
  if (strpos('%author%', $post_link) === FALSE) {
    $post = &get_post($id);
    $author = get_userdata($post->post_author);
    return str_replace('%author%', $author->user_nicename, $post_link);
  }
}

Затем активируйте фильтр (также в functions.php):

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

Как я уже говорил, я не уверен, что это лучший способ сделать это, но у меня это работает :)

10 дек. 2011 г. 18:58:32
Комментарии

Это интересное решение. Пожалуйста, отметьте свой вопрос как решенный.

fuxia fuxia
25 февр. 2012 г. 17:18:33