Slug personalizado para tipo de publicación personalizada con autor

9 dic 2011, 21:02:42
Vistas: 14K
Votos: 8

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

0
Todas las respuestas a la pregunta 1
1

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í :)

10 dic 2011 18:58:32
Comentarios

Es una solución interesante. Por favor, marca tu pregunta como respondida.

fuxia fuxia
25 feb 2012 17:18:33