Кастомный slug для пользовательского типа записи с автором
Привет и спасибо за прочтение.
Я хочу добавить имя автора в 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

Я нашел решение и решил поделиться им, потому что быть добрым - это приятно. Этот вариант работает у меня и основан на решении от Джонатана Бринли. Если у кого-то есть предложения или исправления, пожалуйста, дайте мне знать.
Сначала создайте свой пользовательский тип записи и настройте его следующим образом (это всего лишь пример, не забудьте адаптировать его под свои нужды. Настройка 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);
Как я уже говорил, я не уверен, что это лучший способ сделать это, но у меня это работает :)
