サポート » 使い方全般 » カスタム投稿ページのカテゴリーとURL

  • はじめて投稿致します。初心者ですが、どうぞよろしくお願いします。

    カテゴリーのslugはfashionで設定しているのですが、実際の記事ページのURLを見てみるとカスタム投稿時に追加した際のspecialというのがURLに表示されており、困っております。また、記事ページで the_category();でもfashionというカテゴリーが表示させれません。

    パーマリンクは/%category%/%postname%/こちらで設定しています。

    カスタム投稿を追加したコードは下記になります。

    カスタム投稿ページのURLをspecialではなく、fashionやその他のカテゴリーに変えるにはどうしたらよいでしょうか。宜しくお願い致します。

    add_action( 'init', 'register_cpt_special' );
    
    function register_cpt_special() {
    
        $labels = array(
            'name' => _x( '特集', 'special' ),
            'singular_name' => _x( '特集', 'special' ),
            'add_new' => _x( '新規追加', 'special' ),
            'add_new_item' => _x( '新しい特集を追加', 'special' ),
            'edit_item' => _x( '特集を編集', 'special' ),
            'new_item' => _x( '新しい特集', 'special' ),
            'view_item' => _x( '特集を見る', 'special' ),
            'search_items' => _x( '特集検索', 'special' ),
            'not_found' => _x( '特集が見つかりません', 'special' ),
            'not_found_in_trash' => _x( 'ゴミ箱に特集はありません', 'special' ),
            'parent_item_colon' => _x( '親特集:', 'special' ),
            'menu_name' => _x( '特集', 'special' ),
        );
    
        $args = array(
            'labels' => $labels,
            'hierarchical' => true,
            'description' => '特集など',
            'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'custom-fields' ),
    
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
    
            'show_in_nav_menus' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'has_archive' => true,
            'query_var' => true,
            'can_export' => true,
            'rewrite' => true,
            'capability_type' => 'post'
        );
    
        register_post_type( 'special', $args );
    }
    
    // 管理画面に特集記事のアイコンを追加
    function add_menu_icons_styles(){
         echo '<style>
              #adminmenu #menu-posts-special div.wp-menu-image:before {
                   content: "\f307";
              }
         </style>';
    }
    add_action( 'admin_head', 'add_menu_icons_styles' );
    
    //カテゴリーとタクソノミーをカスタム投稿に追加
    add_action( 'init', 'create_post_type' );
    function create_post_type() {
      register_post_type( 'special', /* post-type */
        array(
          'labels' => array(
            'name' => __( '特集' ),
            'singular_name' => __( '特集' )
          ),
          'public' => true,
          'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ,'comments' ),
          'menu_position' =>5,
          'has_archive' => true
        )
      );
    
    //カスタムタクソノミー、カテゴリタイプ
      register_taxonomy(
        'special-cat',
        'special',
        array(
          'hierarchical' => true,
          'update_count_callback' => '_update_post_term_count',
          'label' => '特集のカテゴリー',
          'singular_label' => '特集のカテゴリー',
          'public' => true,
          'show_ui' => true
        )
      );
    
    //カスタムタクソノミー、タグタイプ
      register_taxonomy(
        'special-tag',
        'special',
        array(
          'hierarchical' => false,
          'update_count_callback' => '_update_post_term_count',
          'label' => '特集のタグ',
          'singular_label' => '特集のタグ',
          'public' => true,
          'show_ui' => true
        )
      );
    
    }
8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 実際に試してみた訳ではないのですが、Codexを読むと次のように書かれています。

    関数リファレンス/register post type

    投稿タイプを登録するとき、その投稿タイプにタクソノミー(カスタム分類)を付ける場合は、必ず taxonomies 引数を使って登録してください。 そうしないと、parse_query や pre_get_posts 等のフィルターを使ったときにタクソノミーと投稿タイプが関連付けられていると認識されず、予想外の結果や異常が生じることがあります。

    register_post_type関数のtaxonomies引数の説明:

    この投稿タイプで使用する、登録されたタクソノミーの配列(category や post_tag など)。register_taxonomy_for_object_type() を直接呼び出す代わりに使用可能。タクソノミー(カスタム分類)は register_taxonomy() で登録する必要がある。

    関数リファレンス/register taxonomy for object type

    この関数は登録済みのタクソノミー(カスタム分類)を登録済みの投稿タイプへ付けます。 タクソノミーの名前とそれを付けるオブジェクトタイプ(投稿など)の名前を受け取って、成功すると true を返します。

    トピック投稿者 yudaix

    (@yudaix)

    ご返答ありがとうございます。

    //カスタムタクソノミー、カテゴリタイプ
    register_taxonomy(
    ‘special-cat’,
    ‘special’,
    array(
    ‘hierarchical’ => true,
    ‘update_count_callback’ => ‘_update_post_term_count’,
    ‘label’ => ‘特集のカテゴリー’,
    ‘singular_label’ => ‘特集のカテゴリー’,
    ‘public’ => true,
    ‘show_ui’ => true,
    ‘taxonomies’ => ‘special’
    )
    );

    こんな感じでにtaxonomiesで投稿タイプを登録するのでしょうか?試してみたのですがやはりカテゴリーが表示できませんでした・・・。

    yudaixさん、「カテゴリーのslugはfashionで設定しているのですが」のカテゴリーは、special-cat でも special-tag でもないようですし、その fashion はトピックの最初に示して頂いたコードに見当たりませんね。
    もしかして、WordPress標準のカテゴリー(タクソノミー名 category)を、カスタム投稿タイプに付けて使おうとしておられるのですか? もし、そうなら、taxonomies引数に指定する値は special ではなくて category ですよ。
    参考トピック ⇒ カスタム投稿とデフォルトカテゴリの紐付け

    なお、コードに関しては下記の点がちょっと不思議な感じがします。困っておられる点とは関係ないかもしれませんが、ご参考まで。

    • カスタムタクソノミーを special-cat と special-tag の2種類登録していますが、register_taxonomy関数の説明を読むと、使ってよい文字は英小文字と下線のみだそうです。ハイフンを下線に変えてみてはどうでしょう。
    • special というカスタム投稿タイプを登録済みですが、register_post_type関数の呼び出しが2回あります。1回でよい筈(2回は多すぎる)ですが、1回だとうまく動作しませんか?
    トピック投稿者 yudaix

    (@yudaix)

    ご返答有り難うございます!

    現在の状況です。
    ①カスタムタクソノミーのハイフンを下線に変更しました!
    ②ご指摘の通り、2回入っているのを消しました!
    ③”taxonomies”の指定する場所があまり理解できておりません。
    ④ ①と②を変更したのですが、やはり特集カテゴリーで作成したfashionというカテゴリーにならず・・・specialがURLになっています。また、記事ページで the_category();でもfashionというカテゴリー名が表示させれませんでした。。

    大変申し訳ないのですが、再度お力を貸してくださいm(__)m

    現在のコードはこちらです。
    add_action( ‘init’, ‘register_cpt_special’ );

    function register_cpt_special() {

    $labels = array(
    ‘name’ => _x( ‘特集’, ‘special’ ),
    ‘singular_name’ => _x( ‘特集’, ‘special’ ),
    ‘add_new’ => _x( ‘新規追加’, ‘special’ ),
    ‘add_new_item’ => _x( ‘新しい特集を追加’, ‘special’ ),
    ‘edit_item’ => _x( ‘特集を編集’, ‘special’ ),
    ‘new_item’ => _x( ‘新しい特集’, ‘special’ ),
    ‘view_item’ => _x( ‘特集を見る’, ‘special’ ),
    ‘search_items’ => _x( ‘特集検索’, ‘special’ ),
    ‘not_found’ => _x( ‘特集が見つかりません’, ‘special’ ),
    ‘not_found_in_trash’ => _x( ‘ゴミ箱に特集はありません’, ‘special’ ),
    ‘parent_item_colon’ => _x( ‘親特集:’, ‘special’ ),
    ‘menu_name’ => _x( ‘特集’, ‘special’ ),
    );

    $args = array(
    ‘labels’ => $labels,
    ‘hierarchical’ => true,
    ‘description’ => ‘特集など’,
    ‘supports’ => array( ‘title’, ‘editor’, ‘excerpt’, ‘thumbnail’, ‘custom-fields’ ),

    ‘public’ => true,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,

    ‘show_in_nav_menus’ => true,
    ‘publicly_queryable’ => true,
    ‘exclude_from_search’ => false,
    ‘has_archive’ => true,
    ‘query_var’ => true,
    ‘can_export’ => true,
    ‘rewrite’ => true,
    ‘capability_type’ => ‘post’
    );

    register_post_type( ‘special’, $args );

    //カスタムタクソノミー、カテゴリタイプ
    register_taxonomy(
    ‘special_cat’,
    ‘special’,
    array(
    ‘hierarchical’ => true,
    ‘update_count_callback’ => ‘_update_post_term_count’,
    ‘label’ => ‘特集のカテゴリー’,
    ‘singular_label’ => ‘特集のカテゴリー’,
    ‘public’ => true,
    ‘show_ui’ => true,
    )
    );

    //カスタムタクソノミー、タグタイプ
    register_taxonomy(
    ‘special_tag’,
    ‘special’,
    array(
    ‘hierarchical’ => false,
    ‘update_count_callback’ => ‘_update_post_term_count’,
    ‘label’ => ‘特集のタグ’,
    ‘singular_label’ => ‘特集のタグ’,
    ‘public’ => true,
    ‘show_ui’ => true
    )
    );

    }

    すみません、どのようにコードを修正すればご希望のパーマリンクになるかは私もわからないのですが、改めて状況を整理させてください。

    まず、スラッグを fashion にしてあるカテゴリーというのは、カスタムタクソノミー special_cat のタームですね。(タームのスラッグが fashion になっている)。その場合、fashion のカテゴリーアーカイブ(正しくはタームのアーカイブ)のURLは /special_cat/fashion になります(/fashion を開こうとするとリダイレクトされます)。

    次にカスタム投稿タイプ special の投稿が一つあり、例えばスラッグを sp1 とします。このとき、投稿のパーマリンクは /カスタム投稿タイプのスラッグ/投稿のスラッグ/ が普通なので /special/sp1 になります(/sp1 を開こうとするとリダイレクトされます)。

    さて、カスタムパーマリンクを /%category%/%postname%/ に設定してある訳ですが、この %cagegory% はカスタムタクソノミーのタームに対応するのではなく、WordPress標準のカテゴリー、つまりタクソノミー category のタームに対応します。
    しかしカスタム投稿 sp1 にはWordPress標準のカテゴリーが付いていませんから、このパーマリンク構造のURLになりません。

    もし special にWordPress標準のカテゴリーを付けられるように下記のコードを実行してから

    register_taxonomy_for_object_type( 'category', 'special' );

    sp1 に標準のカテゴリー(例えばスラッグを cat1 とします)を付けると、sp1/cat1/sp1 というURLで開くことができます(開けますがリダイレクトされて /special/sp1 になります)。

    追伸です。下記のWebページが参考になるかもしれません。

    トピック投稿者 yudaix

    (@yudaix)

    お返事ありがとうございます。

    ということは、カスタム投稿タイプ(special)で投稿が一つ(sp1)がある際に、special-cat/fashion/sp1のURLで開く事は現在のコードでは難しいということでしょうか?

    理解度がなく、質問ばかりで申し訳ないです。

    一つ前のコメントでご紹介したカスタムタクソノミーのパーマリンクで絶望的な404から抜け出した方法の中に書かれているCustom Post Type Permalinksプラグインを試してみてはどうでしょうか。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「カスタム投稿ページのカテゴリーとURL」には新たに返信することはできません。