web-dev-qa-db-ja.com

カスタム投稿タイプとカスタム分類法のテンプレート

私は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

その用語を持つすべてのcptcategory viewとしてリストを表示しようとしています。例:cpt_evenimente(または英語のcpt_events)は、次のようにtax_evenimenteterm(または英語のtax_events)を持ちます。

Skate-parkスケートボードのショーオフcptにはOutdoor Eventtermが割り当てられており、そのtaxonomy-evenimente.phpループ内の用語のために表示する必要があります。

問題は、各分類のテンプレートが読み込まれないことです。やることは何ですか?

4
aifrim

分類アーカイブページに来るとき、命名規則を完全に見逃しています そして、おそらくあなたのカスタム投稿タイプの アーカイブページについても同じことが言えます

分類法アーカイブページは次のようになります。

  • 分類法 - {分類法} - {用語} .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-evenimentetaxonomy.phpと一緒に表示する必要があります。

はい、それはあなたの書き換えルールで起こるべきことですが、それは404ingを続けます。

<---セクションが切り捨てられました--->

編集3

私はあなたのカスタム投稿タイプの書き換えルールを手助けする素晴らしいプラグインを見つけました。これは カスタム投稿タイプパーマリンク注:プラグインに所属していません)と呼ばれます。あなたのコードは現在有効なので、そのままにしておきます

これがすべての仕組みです。

例のために、私はcpt_evenimentetax_evenimenteを使います

enter image description here

  • 希望の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

ちょっと注意してください、「カスタム分類アーカイブのカスタムパーマリンクを使う」のチェックボックスはチェックをはずされるべきです

私はこれがあなたが必要なものであることを願っています。

5
Pieter Goosen