サポート » 使い方全般 » カスタム投稿のタクソノミーについて

  • 解決済 tako86

    (@tako86)


    ネットで知らべ、カスタム投稿を使うことができるようになりました。

    しかし、疑問があります。

    • カスタム投稿のタクソノミーとは、投稿のカテゴリーを同じではないのでしょうか?
    • カテゴリーA、カテゴリーB・・・と設定すると、カテゴリーごとに記事一覧ページを見れますが、タクソノミー別の記事一覧をみることができません。なぜでしょうか?

    何か設定が間違っているのでしょうか?

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • tako86さん

    下のソースをfunctions.phpに登録するとつかえるようになります。
    プラグイン使用でもOKです。

    カテゴリーAの部分は、タクソノミー上は「ターム」になります。
    考え方的には、カテゴリーはタクソノミーの名前が「category」と認識頂ければと思います。

    
    //functions.phpの書き込む
    
    $taxonomy = 'taxonomy_name';//タクソノミ登録の任意のslug
    $object_type = 'custom_post';//カスタム投稿タイプのslug
    
    //登録情報
    $args = array(
    'label' => __('タクソノミーの表示したい名前'),
     
    'labels' => array(
    //labelの中身
      'name' => __('タクソノミ'),//管理メニューに表示名
      'singular_name' => __('タクソノミー'),
      'menu_name' =>  __('タクソノミー'),//管理ページ左メニューの名前
       
      'search_items' => __('検索'),//検索
      'popular_items' => __('よく使われる分類'),//よく使われる(ビルドインの時)
      'all_items' => __('全分類を表示'),//すべて(ビルドインの時)
      'parent_item' => __('親分類を選択'),//親の選択(ビルドイン時)
      'edit_item' => __('現在の分類を編集'),//編集
      'update_item' => __('変更内容を反映'),
      'add_new_item' => __('新しい分類項目を追加'),//登録ページタイトル
      'new_item_name' => __('新規'),
    ),//END label
     
    //その他の設定項目
    'public' => true,//「true」で検索対象になる  true or false
    'show_ui' => true,//管理ページに表示するかどうか  true or false
    'show_in_nav_menus' => true,//外観⇒メニューに表示するかどうか  true or false
    'show_tagcloud' => true,//タグクラウドウィジットに対応させるかどうか  true or false
    'show_in_quick_edit' => true,//一覧のクイック編集に対応させるかどうか  true or false
     
    'show_admin_column' => true,//「true」にすると、関連付けられた投稿タイプのテーブルにタクソノミーのカラムを自動生成します。
    'description' => __('タクソノミー説明文'),
     
    'rewrite' => array(
      'slug' => $taxonomy,//
      'with_front' => false,//URLに「blog」を含めるか false = ブログを表示させない
      'hierarchical' => false,//「true」にすると階層化した URL を使用可能にする
    ),
     
    'hierarchical' => true,//断層化するかどうか
    'sort' => true,//「true」一覧からソートできるようになる  true or false
     
     
    );
     
    register_taxonomy(
    $taxonomy,
    $object_type,
    $args
    );
     
    //END カスタム登録
    
    

    サイドバーなどで表示するには、下記のソースを表示したい場所に設置し(php)タクソノミー名を上記で登録したものに変更すると良いと思います。

    
    wp_list_categories(array('title_li' => '', 'taxonomy' => 'タクソノミー名','hide_empty' => 1));
    
    

    カスタム投稿が理解できていないので、プラグインを利用し理解しようと思いましたが、
    同じようなところで躓いているような気がします。

    カスタム投稿で「畑日記/nikki」を追加。
    タクソノミーで「畑カテゴリー/hatake」を追加。
    「畑カテゴリー」で「トマト/tomato」「じゃがいも/poteto」を追加。
    ※英字はスラッグ

    これで、トマトとじゃがいもの記事を作成すると、
    URLは*****/nikki/今日のトマト や *****/nikki/今日のジャガイモ となる。
    なぜ、*****/nikki(hatake)/tomato/今日のトマト や *****/nikki(hatake)/poteto/今日のジャガイモ とならないの? 

    また、*****/nikki(hatake)/にアクセスると、「お探しのページが見つかりません。」と表示される。なぜ?

    カスタム投稿は、普通の投稿と同じように使えるのでしょうか?
    悩んでるのは私だけ?全然理解できない。諦めたくなってきた。

    普通の投稿と同じようにならないのでしょうか?
    助けてー

    • この返信は2 ヶ月、 3 週間前に  tako86 さんが編集しました。
    • この返信は2 ヶ月、 3 週間前に  tako86 さんが編集しました。

    tako86さん

    標準状態の投稿及びカテゴリーは

    投稿タイプ:post
    タクソノミー:category

    となっています。

    今回の場合は
    投稿タイプ:nikki
    タクソノミー:hatake
    となります。

    「畑カテゴリー」で「トマト/tomato」「じゃがいも/poteto」を追加。

    こちらは、「タクソノミー:畑」に対するタームとなりますので

    で、URLに関しましては、標準状態ではタクソノミーは複数の投稿タイプが定義できる想定になっているため、タクソノミーの登録時に「リライト」という項目で定義をする必要があります。

    また、*****/nikki(hatake)/にアクセスると、「お探しのページが見つかりません。」と表示される。なぜ?

    こちらは、カスタム投稿タイプが公開として登録してあれば、カスタム投稿タイプに属する記事一覧が表示されるはずだと思います。

    「お探しのページが見つかりません。」の原因は3つ考えられます。
    1.タクソノミー及び投稿タイプを登録した後に、管理ページの「設定⇒パーマリンク」を再設定していない(おそらくコレ)
    2.カスタム投稿タイプが公開(’public’ => $public)になっていない
    3.カスタム投稿タイプに公開状態の記事が存在しない

    上記いずれかの可能性が大きいので、ご確認頂ければと思います。

    ワードプレスの場合なれないと、用語がごちゃごちゃになりやすいので
    通常、カテゴリーと思っているを「ターム」として認識できれば、それほど難しくないですよ。

    mura0403さん

    ありがとうございます。
    このように説明されると、わかりやすいですね。

    *****/hatake/tomato/ や *****/hatake/potato/ で記事一覧は表示されましたが、
    *****/nikki/ や *****/hatake/ では「お探しのページが見つかりません。」のままです。

    データベースを削除しやり直しましたが、結果は変わりません。
    そこで、

    1.タクソノミー及び投稿タイプを登録した後に、管理ページの「設定⇒パーマリンク」を再設定していない(おそらくコレ)

    これをやっても変わりません。

    2.カスタム投稿タイプが公開(’public’ => $public)になっていない

    CPTのカスタム投稿編集で「設定」内にある一般公開がTrueになっていればいいのでしょうか?
    ちなみに、trueになっている。

    3.カスタム投稿タイプに公開状態の記事が存在しない

    カスタム投稿(畑日記)の畑日記一覧には5つの記事があり、「公開済み」となっている。

    何かのやり方が悪いのでしょうか?
    テーマは、「Twentyseventeen」をコピーし、「test」に変更し利用。
    それ以外はとくに何もしていないのですが・・・

    tako86さん

    1 以下のソースをテーマ内にある「functions.php」の中の適当な場所にコピーしてみては如何でしょうか。(いつも使っているソースに変更をかけたものです)

    2 プラグインCPTを停止させ、パーマリンクの設定を更新

    3 挙動を確認してみてください。

    URLについては、404が消えてから、確認すると良いと思いますので

    「ワードプレスインストールのURL/nikki」に確認してみてください。

    
    
    //functions.phpへコピー
    
    //カスタムポスト
    
    //カスタム投稿を追加 ----------------------------------------------------------------
    if ( function_exists('register_post_type') ) :
     
    $post_type = '';
    $name = '';
    $menu_name = '';
    $menu_name_reg ='';
    $singular_name = '';
    $post_desc = '';
    $description = '';
     
    $post_type = 'nikki';
    $name = '畑日記';
    $singular_name = '';
    $post_desc = '説明文';
    $menu_name = '';//左メニューの名前を変更したい場合
     
    //状態オプション
    $public = true;//公開するかどうか true or false
    $has_archive = true;//アーカイブページを作るかどうか
    $exclude_search = false;//検索除外をするかどうか
    $hierarchical = false;//子を持たせるか(通常は無効・負荷がかかる)
    $with_front = true;//URLにアーカイブ(blogやカテゴリー)を表示さするか
     
    //権限設定
    $capability_type = 'post';//post or page
     
    //管理メニューの項目
    $show_in_nav_menus = true;//外観⇒メニューに表示するか  true or false
    $show_ui = true;//管理ページにメニューを表示する true or false
      $show_in_menu = true;//管理ページにメニューを表示する true or false
      $show_in_admin_bar = true;//管理ページにメニューを表示する true or false
    $menu_icon = 'dashicons-cart';//メニューアイコンの指定
    $menu_position = 5;
    $supports = array('title','editor','thumbnail','comments','excerpt','page-attributes');
        //'title' (タイトル)
        //'editor' (内容の編集)
        //'author' (作成者)
        //'thumbnail' (アイキャッチ画像。現在のテーマが post-thumbnails をサポートしていること)
        //'excerpt' (抜粋)
        //'trackbacks' (トラックバック送信)
        //'custom-fields' (カスタムフィールド)
        //'comments' (コメントの他、編集画面にコメント数のバルーンを表示する)
        //'revisions' (リビジョンを保存する)
        //'page-attributes' (メニューの順序。「親〜」オプションを表示するために hierarchical が true であること)
        //'post-formats' (投稿のフォーマットを追加。投稿フォーマットを参照)
     
    //END option
     
     
    if( ! $singular_name): $singular_name = $name; endif;
    if($menu_name): $menu_name_reg = $menu_name; else: $menu_name_reg = $name; endif; 
    if( get_option( 'posttype_item' )  ): $description = get_option( 'posttype_item' );  else :  $description = $post_desc; endif;
     
     $labels = array(
      'name' => __($name),
      'singular_name' => __($singular_name),//管理バー
      'menu_name' => __($menu_name_reg),//単数形(通常これが表示される)
      'name_admin_bar' => __($name.'追加'),//管理バー(上)新規作成
     
       
      'add_new' => __($name.'新規登録'),//メニューバーの表示
      'add_new_item' => __($name.'を登録します。'),//新規作成のタイトル
      'edit_item' => __($name.'を編集'),//編集
      'new_item' => __($name.'を新規登録'),//不明
      'view_item' => __($name.'のプレビュー'),//プレビュー
      'all_items' => __($name.'一覧'),//すべてのアイテム
      'search_items' => __($name.'検索'),//検索
      'not_found' => __('登録されている'.$name.'はありません!'),//一覧に記事がない時
      'not_found_in_trash' => __('ゴミ箱は空です!'), //ゴミ箱が空の時
      'parent_item_colon' => ''//親の指定
     );
      
    register_post_type( $post_type, 
      
     array(
      'label' => __($name),
      'labels' => $labels,
      'description' =>  __( $description ),
      'publicly_queryable' => true,
      'menu_position' => $menu_position,
      'menu_icon' => $menu_icon,//アイコンの表示
       
      'show_ui' => $show_ui,//メニュー表示するか
        'show_in_menu' => $show_in_menu,//左メニューをひょうじするか。  true or false
        'show_in_admin_bar' =>  $show_in_admin_bar,//管理バー(上)メニューをひょうじするか。  true or false
     
         
      'exclude_from_search' => $exclude_search,//検索から除外を有効にするか  true or false(trueで検索させない)
      'public' => $public,//公開状態
         
      'query_var' => true,
      'rewrite' => array(
        'slug' => $post_type,
        'with_front' => $with_front//※アーカイブやカテゴリーをURLに含ますかどうか
      ),
       
       
      'show_in_nav_menus' => $show_in_nav_menus,//外観⇒メニューに表示するか  true or false
      'capability_type' => $capability_type,//管理権限タイプ
      'hierarchical' => $hierarchical,//親子関係を持たせるか def:false  true or false
      'has_archive' => $has_archive,
     
      //'_builtin' => true,
       
      'supports' => $supports
     )
     );
     
    endif;
     
    //END カスタム投稿「販売商品」を追加 ----------------------------------------------------------------
    
    //カスタム分類を追加
     
       
    $taxonomy = 'hatake';//登録したいカスタムタクソノミー
    $object_type = array('nikki');//ビルドインしたい投稿タイプ
     
    //登録情報 
    $args = array(
    'label' => __('畑カテゴリー'),
     
    'labels' => array(
    //labelの中身
      'name' => __('畑カテゴリー'),//管理メニューに表示名
      'singular_name' => __('畑カテゴリー'),
      'menu_name' =>  __('畑カテゴリー'),//管理ページ左メニューの名前
       
      'search_items' => __('検索'),//検索
      'popular_items' => __('よく使われる分類'),//よく使われる(ビルドインの時)
      'all_items' => __('全分類を表示'),//すべて(ビルドインの時)
      'parent_item' => __('親分類を選択'),//親の選択(ビルドイン時)
      'edit_item' => __('現在の分類を編集'),//編集
      'update_item' => __('変更内容を反映'),
      'add_new_item' => __('新しい分類項目を追加'),//登録ページタイトル
      'new_item_name' => __('新規'),
    ),//END label
     
    //その他の設定項目
    'public' =>  false,//「true」で検索対象になる  true or false
    'show_ui' => true,//管理ページに表示するかどうか  true or false
    'show_in_nav_menus' =>  false,//外観⇒メニューに表示するかどうか  true or false
    'show_tagcloud' => false,//タグクラウドウィジットに対応させるかどうか  true or false
    'show_in_quick_edit' => true,//一覧のクイック編集に対応させるかどうか  true or false
     
    'show_admin_column' => true,//「true」にすると、関連付けられた投稿タイプのテーブルにタクソノミーのカラムを自動生成します。
    'description' => __('説明文'),
     
    'rewrite' => array(
      'slug' => $taxonomy,
      'with_front' => false,//URLに「blog」を含めるか false = ブログを表示させない
      'hierarchical' => true,//「true」にすると階層化した URL を使用可能にする
    ),
     
    'hierarchical' => true,//断層化するかどうか
    //'capabilities' => 'manage_categories', //権限設定
      //権限項目
      //'manage_terms' - 'manage_categories'
      //'edit_terms' - 'manage_categories'
      //'delete_terms' - 'manage_categories'
      //'assign_terms' - 'edit_posts'
    'sort' => true,//「true」一覧からソートできるようになる  true or false
     
     
    );
     
    register_taxonomy($taxonomy,$object_type,$args);  
       
       
       
     
    //END カスタム分類を追加
    
    
    • この返信は2 ヶ月、 3 週間前に  photographer hiro. さんが編集しました。理由: 誤字修正

    mura0403さん

    ありがとうございます。
    アドバイス通りやったところ、*****/nikki/で記事一覧が表示されました。

    逆に、いままで表示されていた
    *****/hatake/tomato/ や *****/hatake/potato/で記事一覧は表示できなくなりました。

    よろしくお願いいたします。

    tako86さん

    タクソノミーのリライトの部分を以下のように書き換えてみてはいかがでしょうか?

    
    'rewrite' => array(
      'slug' => $post_type.'/'.$taxonomy,
      'with_front' => false,//URLに「blog」を含めるか false = ブログを表示させない
      'hierarchical' => true,//「true」にすると階層化した URL を使用可能にする
    ),
    

    うまくいかなかったら、「’slug’ => ‘nikki/hatake/’,」に変更してください。

    ダメな場合は、別スレッドで「カスタムタクソノミーのリライトURLをカスタマイズ(変更)したい」で立て直した方が良いかもしれないです。

    mura0403さん

    ありがとうございます。
    やはり、思うような結果とならないようです。
    *****/hatake/tomato/ や *****/hatake/potato/ はトップページが表示されるようです。

    実際に、何に使うかは決めてなく、このカスタム投稿という機能はどういうものなのか?
    といった疑問があったので、この場を借りました。

    もう少しゆっくり、この機能について調べてみます。

    tako86さん

    *****/hatake/tomato/ や *****/hatake/potato/ はトップページが表示されるようです。

    多分、お話を聞いている限りですと、タクソノミーがうまく行ってないというよりは
    リライトの定義を変更されていないだけな気がしますので、下記URLなど参考にされるといいかもしれません。

    http://www.webdesignleaves.com/wp/wordpress/159/

    あまりお役にたてず、すみません。

    mura0403さん

    わざわざすみません。
    とりあえず、本を購入してみました。

    ご紹介いただいたサイトも参考にしてみます。

    ありがとうございました。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • このトピックに返信するにはログインが必要です。