Slug personalizzato per custom post type con autore

9 dic 2011, 21:02:42
Visualizzazioni: 14K
Voti: 8

Ciao e grazie per la lettura.

Vorrei inserire l'autore del post nello slug del mio custom post type.

Esempio: http://example.com/charts/%author%/

Qualche idea su come realizzarlo?

Ecco il mio custom post type:

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',
  ),
));

Saluti
jnz

0
Tutte le risposte alla domanda 1
1

Ho trovato una soluzione e ho deciso di condividerla perché è bello essere gentili. Funziona per me ed è basata su una soluzione di Jonathan Brinley. Se qualcuno ha suggerimenti o correzioni, sentitevi liberi di farmelo sapere.

Per prima cosa, crea il tuo custom post type e configuralo in questo modo (questo è solo un esempio, ricordati di adattarlo alle tue esigenze. L'impostazione dello slug è importante!):

register_post_type('charts', array( 
  'label' => 'Qualsiasi',
  'description' => '',
  'public' => true,
  'show_ui' => true,
  'show_in_menu' => true,
  'capability_type' => 'post',
  'hierarchical' => true,
  'rewrite' => array('slug' => '/qualiasi/%author%'),
  'query_var' => true,
  'supports' => array(
    'title',
    'editor',
    'trackbacks',
    'custom-fields',
    'comments',
    'author'
  ) 
));

Successivamente, imposta una funzione per il tuo filtro (in 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);
  }
}

Poi attiva il filtro (sempre in functions.php):

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

Come ho detto, non sono sicuro che questo sia il modo migliore per farlo, ma funziona per me :)

10 dic 2011 18:58:32
Commenti

È una soluzione interessante. Per favore, segna la tua domanda come risolta.

fuxia fuxia
25 feb 2012 17:18:33