web-dev-qa-db-ja.com

カスタムパーマリンク構造:/%custom-post-type%/%custom-taxonomy%/%post-name%/

次のことを実現できるカスタムパーマリンク構造を作成しようとしています。

  1. 「プロジェクト」というカスタム投稿タイプがあります
  2. CPT「プロジェクト」に割り当てられる「プロジェクトカテゴリ」というカスタム分類があります

私はパーマリンク構造を次のようにしたいです:

projects/category/project-name

または

/%custom-post-type%/%custom-taxonomy%/%post-name%/

私は、パーマリンクで/%category%/を通常の、すぐに使えるWP投稿に使用できましたが、CPTには使用できませんでした。

このようなパーマリンク構造を作成すると、URLや他のページにどのような影響がありますか?カスタムパーマリンク構造を定義解除して、単一のCPTに制限することは可能ですか?

ありがとう

21
Bruno Cloutier

幸運なことに、私justはクライアントプロジェクトに対してこれを行わなければなりませんでした。私は をWordPress Stackexchange のガイドとしてこの回答を使用しました:

/**
 * Tell WordPress how to interpret our project URL structure
 *
 * @param array $rules Existing rewrite rules
 * @return array
 */
function so23698827_add_rewrite_rules( $rules ) {
  $new = array();
  $new['projects/([^/]+)/(.+)/?$'] = 'index.php?cpt_project=$matches[2]';
  $new['projects/(.+)/?$'] = 'index.php?cpt_project_category=$matches[1]';

  return array_merge( $new, $rules ); // Ensure our rules come first
}
add_filter( 'rewrite_rules_array', 'so23698827_add_rewrite_rules' );

/**
 * Handle the '%project_category%' URL placeholder
 *
 * @param str $link The link to the post
 * @param WP_Post object $post The post object
 * @return str
 */
function so23698827_filter_post_type_link( $link, $post ) {
  if ( $post->post_type == 'cpt_project' ) {
    if ( $cats = get_the_terms( $post->ID, 'cpt_project_category' ) ) {
      $link = str_replace( '%project_category%', current( $cats )->slug, $link );
    }
  }
  return $link;
}
add_filter( 'post_type_link', 'so23698827_filter_post_type_link', 10, 2 );

カスタム投稿タイプと分類を登録するときは、必ず次の設定を使用してください。

// Used for registering cpt_project custom post type
$post_type_args = array(
  'rewrite' => array(
    'slug' => 'projects/%project_category%',
    'with_front' => true
  )
);

// Some of the args being passed to register_taxonomy() for 'cpt_project_category'
$taxonomy_args = array(
  'rewrite' => array(
    'slug' => 'projects',
    'with_front' => true
  )
);

もちろん、完了したら書き換えルールをフラッシュしてください。幸運を!

26
Steve Grunwell

あなたがカスタム投稿タイプを登録している間、スラッグを

$post_type_args = array(
  'rewrite' => array(
    'slug' => 'projects',
    'with_front' => true
  )

あなたはSetting-> permalinkで試すことができます

その投稿の親もあなたのリンクを作る

0
Rohit Kaushik