Slug personalizado para tipo de publicación personalizada con autor
Hola y gracias por leer.
Quiero insertar el autor de la publicación en el slug de mi tipo de publicación personalizada.
Ejemplo: http://example.com/charts/%author%/
¿Alguna idea de cómo lograrlo?
Aquí está mi tipo de publicación personalizada:
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',
),
));
Saludos,
jnz

Descubrí una solución y decidí compartirla porque es bueno ser amable. Esto funciona para mí y está basado en una solución de Jonathan Brinley. Si alguien tiene sugerencias o correcciones, no dudes en hacérmelo saber.
Primero, crea tu tipo de contenido personalizado y configúralo así (esto es solo un ejemplo, recuerda adaptarlo a tus necesidades. ¡La configuración del slug es importante!):
register_post_type('charts', array(
'label' => 'LoQueSea',
'description' => '',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => '/lo-que-sea/%author%'), // Configuración del slug importante
'query_var' => true,
'supports' => array(
'title',
'editor',
'trackbacks',
'custom-fields',
'comments',
'author'
)
));
A continuación, configura una función para tu filtro (en functions.php
):
function mi_funcion_filtro_enlace_tipo_post($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);
}
}
Luego activa el filtro (también en functions.php
):
add_filter('post_type_link', 'mi_funcion_filtro_enlace_tipo_post', 1, 3);
Como dije, no estoy seguro de que esta sea la mejor manera de hacerlo, pero funciona para mí :)
