私はWordPress MultiSiteインストールの下に配置されたカスタムテーマ for サイトのネットワークに取り組んでいます。
これらのテーマの中で、私は4つの{カスタム投稿タイプ}を作成し、それらすべてに2つの分類法が追加されています。最初の分類法はpost_tag
の分類法で、もう1つはcategory
の分類法に似たカスタム分類法です。
私は4つのカスタム投稿タイプのすべてがそれらの自身の分類カテゴリを持つように選択しました。投稿タイプ内にカテゴリbleedが必要ないからです。
これが私のコードです:
<?php
function o_post_types()
{
$post_types = array(
'articole' => array(
'name' => 'Articole',
'single' => 'Articol',
'icon' => 'dashicons-admin-post'
),
'evenimente' => array(
'name' => 'Evenimente',
'single' => 'Eveniment',
'icon' => 'dashicons-video-alt'
),
'concursuri' => array(
'name' => 'Concursuri',
'single' => 'Concurs',
'icon' => 'dashicons-awards'
),
'fotografii' => array(
'name' => 'Fotografii',
'single' => 'Fotografie',
'icon' => 'dashicons-format-image'
),
'promotii' => array(
'name' => 'Promoții',
'single' => 'Promoție',
'icon' => 'dashicons-share'
)
);
foreach ($post_types as $post_type) {
$icon = $post_type['icon'];
$name_lower = strtolower($post_type['name']);
$single_lower = strtolower($post_type['single']);
if ($post_type['name'] == 'Promoții') {
$name_lower = 'promotii';
$single_lower = 'promotie';
}
$labels = array(
'name' => $post_type['name'],
'singular_name' => $post_type['single'],
'add_new' => 'Adaugă ' . $single_lower,
'add_new_item' => 'Adaugă ' . $single_lower . ' nou',
'edit_item' => 'Editează ' . $single_lower,
'new_item' => $post_type['single'] . ' nou',
'all_items' => 'Listă ' . $name_lower,
'view_item' => 'Afișează ' . $single_lower,
'search_items' => 'Caută în ' . $name_lower,
'not_found' => 'Nici un ' . $single_lower . ' găsit.',
'not_found_in_trash' => 'Nici un ' . $single_lower . ' găsit în Gunoi.',
'parent_item_colon' => '',
'menu_name' => $post_type['name']
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => $name_lower, 'with_front' => false),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
'taxonomies' => array('post_tag'),
'menu_icon' => $icon
);
register_post_type("cpt_" . $single_lower, $args);
$labels = array(
'name' => 'Categorii',
'singular_name' => 'Categorie',
'search_items' => 'Caută Categorii',
'all_items' => 'Toate Categoriile',
'parent_item' => 'Categorie Părinte',
'parent_item_colon' => 'Categorie Părinte:',
'edit_item' => 'Modifică Categorie',
'update_item' => 'Actualizează Categorie',
'add_new_item' => 'Adaugă Categorie nouă',
'new_item_name' => 'Numele noii categorii',
'menu_name' => 'Categorii',
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array(
'hierarchical' => true,
'slug' => $name_lower,
'with_front' => false
),
);
register_taxonomy("tax_" . $name_lower, "cpt_" . $single_lower, $args);
}
}
EDIT 1 *
ファイル名は次のとおりです。
taxonomy-articole.php
taxonomy-concursuri.php
taxonomy-evenimente.php
taxonomy-fotografii.php
taxonomy-promotii.php
その用語を持つすべてのcpt
のcategory viewとしてリストを表示しようとしています。例:cpt_evenimente
(または英語のcpt_events
)は、次のようにtax_evenimente
term(または英語のtax_events
)を持ちます。
Skate-parkスケートボードのショーオフcpt
にはOutdoor Eventterm
が割り当てられており、そのtaxonomy-evenimente.php
ループ内の用語のために表示する必要があります。
問題は、各分類のテンプレートが読み込まれないことです。やることは何ですか?
分類アーカイブページに来るとき、命名規則を完全に見逃しています そして、おそらくあなたのカスタム投稿タイプの アーカイブページについても同じことが言えます
分類法アーカイブページは次のようになります。
分類法 - {分類法} - {用語} .php - 分類法がsometax
、分類法の用語がsometerm
の場合、WordPressはtaxonomy-sometax-someterm.php
を探します。ポストフォーマットの場合、分類はpost_format
で、用語はpost_format-{format}
です。すなわちtaxonomy-post_format-post-format-link.php
分類法 - {分類法} .php - 分類法がsometax
の場合、WordPressはtaxonomy-sometax.php
を探します。
taxonomy.php
archive.php
index.php
したがって、すべての分類法テンプレートはtaxonomy-tax_{$name_lower}.php
と呼ばれる必要があります。ここで$name_lower
は変数に割り当てられた名前です。
あなたの投稿へのコメントで私が挙げたもう一つの問題は
あなたの名前にハイフンを使わないで、単語を区切るためにアンダースコアを利用する
これが、ハイフンの有無にかかわらず名前をテストし、それがテンプレートの使用方法にどのように影響するかを確認する機会です。
例:
分類名をtax-mytax
にしてテンプレートtaxonomy-tax-mytax.php
を作成すると、wordpressがテンプレートを次のように読み込むため、これは機能しません。tax
は分類名、mytax
は用語
最後に、あなたがそれを意図的に除外したかどうかはわかりませんが、あなたの関数はinit
フックにフックされるべきです。
編集1
グッドプラクティスに関するもう1つのポイントも、英語であなたの議論を書き、それらを翻訳可能にすることです。あなたの言語とは異なる言語を話す人は、私の場合のようにラベルの意味を理解するのに苦労するでしょう:-)。これが、翻訳者が利用できるようにするためにあなたの関数がinit
にフックされるべきである大きな理由の一つです
編集2
あなたの書き換え規則があなたの問題を引き起こしているようです。チャットで議論されたことから、
私は
tax_evenimente
という名前の分類法があります。これはカテゴリのような分類法です。スラッグAlte Evenimente
を含む用語alte-evenimente
があります。site.com/evenimente/alte-evenimente
はtaxonomy.php
と一緒に表示する必要があります。
はい、それはあなたの書き換えルールで起こるべきことですが、それは404
ingを続けます。
<---セクションが切り捨てられました--->
編集3
私はあなたのカスタム投稿タイプの書き換えルールを手助けする素晴らしいプラグインを見つけました。これは カスタム投稿タイプパーマリンク (注:プラグインに所属していません)と呼ばれます。あなたのコードは現在有効なので、そのままにしておきます
(例のために、私はcpt_evenimente
とtax_evenimente
を使います)
あなたのパーマリンク設定ページに行き、あなたのカスタム投稿タイプのための設定までスクロールしてください。これはどのように見えるかです
希望のURLを取得するには、/%postname%/
を/%year%/%monthnum%/%postname%/
に変更します。
パーマリンクを保存する
今、テストのために
site.com/evenimente/alte-evenimente/
分類法からの用語の分類法アーカイブを表示しますtax_evenimente
on taxonomy-tax_evenimente.php
site.com/evenimente/
カスタム投稿タイプのカスタム投稿タイプアーカイブを表示しますcpt_evenimente
site.com/evenimente/2014/10/testing-posts-1/
単一の投稿を表示しますtesting post 1
ちょっと注意してください、「カスタム分類アーカイブのカスタムパーマリンクを使う」のチェックボックスはチェックをはずされるべきです
私はこれがあなたが必要なものであることを願っています。