web-dev-qa-db-ja.com

カスタム投稿タイプに「階層型」数値設定が必要なのはなぜですか?

私はCPTについてのいくつかのことを理解するのに苦労していて、そして何らかの助けを借りて行うことができます。分類法は階層的である必要があることが多いのですが、カスタム投稿タイプがいつどのように表示されるのかわかりませんか。

つまり、「プロジェクト」というCPTがあります。このポストタイプには「フィールド」という分類法が登録されています。 'fields'の下には、たくさんのサブアイテムがあります。

  • 「ドキュメンタリー」
  • 「ドキュメンタリー」>「自己批判」
  • 「ドキュメンタリー」>「クラシック」
  • 「コーポレート」
  • 「企業」>「デジタルマーケティング」
  • 等...

それで、「ドキュメンタリー」>「クラシック」でプロジェクトを見るために、私はこのURLを使います:mydomain.com/field/classic/

これは私が実際に約30の質問を持っている場所です:)しかしただただ最も緊急の2つを尋ねるでしょう:

  1. なぜそしてどのように「プロジェクト」CPTは階層的になるのでしょうか?
  2. Mydomain.com/projects/classic(mydomain.com/projectsはすべての項目を表示しますが、それ以上ドリルすると分割されません)

私はこれで遊んで読んだり約3時間費やしていたので、頭を動かすことができません!

ありがとうございます。

以下は参考のために私の(トリミングした)コードです。

function register_cpt_projects() {
$labels = array(
    'name' => _x('Projects', 'projects'),
    // all other labels etc..
);

$args = array(
    'labels' => $labels,
    'hierarchical' => true,
    'supports' => array('title', 'editor', 'author', 'thumbnail'),
    'taxonomies' => array('field'),
    '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('projects', $args);
}

add_action('init', 'register_cpt_projects');

function create_projects_tax(){
    register_taxonomy('field', 'projects', array(
       'hierarchical' => true,
       'label' => 'Fields'
    ));
}
add_action('init', 'create_projects_tax');
3

似たようなインターフェースまたは共有プロパティを持つ2つのコンテンツオブジェクトがある場合、階層型投稿タイプに適した候補があります。

例として places を取ります( この答え を参照):

  • アジア
  • ヨーロッパ
    • ドイツ
      • ベルリン
    • オーストリア
      • ウィーン

それぞれの place には、人口、地理座標、話されている言語などの類似のメタデータがあります。あなたはただ同じインターフェースを再利用することができます。

さらに、WordPressで遭遇する場所の種類ごとに個別のカスタム投稿タイプを作成した場合、 投稿間の関係テーブルがなくなりました

3
fuxia

投稿タイプをページのように動作させる場合は、カスタム投稿タイプに階層設定のみが必要です。

もしあなたが親を選択してメニュー順のメタボックスを持つことができるようにしたいのなら、あなたはsupports配列に 'page-attributes'も追加する必要があります。

階層引数 を使用すると、is_post_type_hierarchical()条件タグを使用して、階層型投稿タイプを他の投稿タイプとは別に扱うこともできます。単一のパラメータとして、投稿オブジェクト、投稿タイプ名、または投稿IDをサポートします。

Mydomain.com/projects/classic(mydomain.com/projectsはすべての項目を表示しますが、それ以上ドリルすると分割されません)

Rewrite引数を使用して、単一の投稿タイプのURLの表示方法を定義できます。

slug:投稿にプレフィックスを付けるスラッグ。
with_front:あなたの投稿タイプがあなたのパーマリンク設定からのフロントベースを使うべきかどうか。

'rewrite' => array( 'slug' => 'classic', 'with_front' => false ),

単一のプロジェクト投稿のURLは次のようになります。

yoursite.com/classic/post-name

アーカイブのURLをmydomain.com/projects/classicにする場合は、register_taxonomy引数にも同様の書き換え規則を適用する必要があります。

書き換えスラッグをprojectsに、with_frontをfalseに設定する必要があります。また、register_taxonomy書き換え配列は、次のものもサポートしています。'hierarchical' - true or false allow hierarchical urlsこれにより、URLの分類用語に完全な階層を使用できます。

3
Chris_O