web-dev-qa-db-ja.com

カスタムポストタイプのカスタムスラグ

こんにちはそして読んでくれてありがとう。

投稿投稿者をカスタム投稿タイプのスラッグに挿入したいです。

例: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

6
honk31

私は解決策を考え出し、そのNiceがNiceになるので共有することにしました。これは私のために働き、 Jonathan Brinley による解決法に基づいています。誰かが何か提案や修正があれば私に知らせてください。

最初に、カスタム投稿タイプを作成し、このように設定します(これは単なる例です。自分のニーズに合うようにしてください。スラッグ設定は重要です)。

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

次に、フィルタ用の関数を(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);

私が言ったように、これがこれを行うための最良の方法であるかどうか私は確信していません、しかしそれは私のために働きます:)

8
honk31