web-dev-qa-db-fra.com

slug personnalisé pour type de post personnalisé

Bonjour et merci d'avoir lu.

Je veux insérer l'auteur du message dans mon slug de type message personnalisé.

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

Des idées comment accomplir ceci?

Voici mon type de message personnalisé:

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

bénisse jnz

6
honk31

J'ai trouvé une solution et décidé de partager parce que c'est bien d'être Nice. Cela fonctionne pour moi et est basé sur une solution de Jonathan Brinley . Si quelqu'un a des suggestions ou des corrections, n'hésitez pas à me le faire savoir.

Commencez par créer votre type d'article personnalisé et configurez-le comme ceci (il ne s'agit que d'un exemple. N'oubliez pas de l'adapter à vos besoins. Le paramètre slug est important!)

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

Ensuite, configurez une fonction pour votre filtre (dans 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);
  }
}

Activez ensuite le filtre (également dans functions.php):

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

Comme je l'ai dit, je ne suis pas sûr que ce soit la meilleure façon de procéder mais cela fonctionne pour moi :)

8
honk31