WordPressで排他的なカスタム分類法を作成する方法
公開: 2022-03-11最も強力なオープンソースのブログおよびコンテンツ管理システムの1つであるWordPressは、インターウェブの主要なチャンクを強化するために使用されています。 すべてのウェブサイトの最大4分の1がWordPressを実行しており、WordPress開発サービスの需要に不足はありません。
他の多くのCMSとは異なり、WordPressはその柔軟性とカスタマイズ性で多くの人に愛されています。 WordPressのコア機能の1つである分類法を使用すると、必要な方法でコンテンツを整理できます。 いくつかのデフォルトの分類法が組み込まれていますが、WordPressでは必要な数のカスタム分類法を追加できます。
ただし、分類法を希望どおりに動作させるには、文書化されていないアプローチをいじる必要がある場合があります。
この記事では、WordPressでタグよりもカテゴリのように動作する排他的なカスタム分類法を定義して、箱から出してすぐに使用できるよりもはるかに厳密に投稿を分類できるようにする方法を学習します。
分類法とは何ですか?
WordPressコーデックスによると:
分類法は、物事をグループ化する方法です。
たとえば、さまざまな種類の果物の束をさまざまな特性に従ってグループ化し、それらのグループに名前を割り当てることができます。
WordPressでは、分類法を使用して、投稿、ページ、さらにはカスタム投稿タイプをさまざまなグループにグループ化します。
分類法のさまざまなグループの名前は、用語と呼ばれます。 たとえば、果物と、その色に基づいて果物をグループ化する方法を考えてみましょう。 この場合、異なる色の名前が用語になります。
デフォルトでは、WordPressには、カテゴリ、タグ、リンクカテゴリ、投稿形式の4つの分類法が組み込まれています。 これらのデフォルトの分類法について詳しくは、こちらをご覧ください。
これらの組み込みの分類法の中で、カテゴリとタグは非常に似ていますが、重要な違いが1つあります。カテゴリは排他的な分類法です(つまり、投稿ごとに最大1つのカテゴリを選択できます)が、各投稿には複数のタグを割り当てることができます。
さらに、カテゴリは通常事前定義されていますが、タグは必要に応じて定義できます。
カスタム分類法の定義
register_taxonomy()
関数を使用して、カスタム分類法を定義できます。 この関数について詳しくは、こちらをご覧ください。
この関数がどのように機能するかを確認するために、風景の写真を含む投稿のカスタム分類を定義しましょう。
function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );
上記のスニペットでは、 viewと呼ばれる投稿の新しい分類法を定義しています。
この分類法は、写真に含まれるビューの種類や性質(山、湖、森など)に基づいて写真を分類するために使用されていると考えることができます。
いつものように、このカテゴリの特定の用語に属する投稿は/ view/{view_name}の下に表示されます。
上記のスニペットの機能行はオプションです。 これがないと、WordPressのデフォルトの機能は投稿と同じユーザーになります。 上に示したように、これにより、カスタムの「edit_guides」機能を持つすべてのユーザーが分類法を投稿に割り当て、カスタムの「publish_guides」機能を持つすべてのユーザーが新しい分類法アイテムを作成できるようになります。
公式ドキュメントによると、定義できる機能は4つあります。
タクソノミー機能には、
assignterms
、editterms
、manageterms
(管理ナビゲーションにタクソノミーを表示)、およびdeleteterms
ます。
分類法の使用方法
コード内で、 wp_set_object_terms()
関数を使用して、分類法を使用してオブジェクトに用語を追加できます。 the_terms()
関数を使用して、既存の用語を一覧表示できます。 さらに、 wp_tag_cloud()
関数を使用して、カスタム分類法の用語のクラウドを生成できます。 これらの関数について詳しくは、こちらをご覧ください。
UI側では、WordPressはすべての分類法の投稿に新しいメタボックスを作成します。 メタボックスは、1つ以上の用語を投稿にリンクできる[タグ]メタボックスに似ています。 これはWordPressがデフォルトで行うことであり、これは分類法を排他的にすることで変更できることです。カスタム分類法をカテゴリ分類法のように動作させます。
タクソノミーに排他性を強制する
register_taxonomy()
メソッドを使用してカスタム分類法を作成すると、WordPressは複数の項目を選択したメタボックスを投稿編集ページに追加します。
このメタボックスを使用すると、ユーザーは既存の(すでに使用されている)用語をいくつでも選択でき、テキストボックスを使用して新しい用語を追加することもできます。
各投稿が事前定義されたカテゴリのセットから最大で1つのカテゴリに属する、カテゴリのような分類を作成するには、WordPressを少し調整することで作成できます。
- WordPressによって作成されたデフォルトのメタボックスを非表示にします。
- 投稿編集ページにカスタムメタボックスを作成します。これにより、単一のアイテムを選択するためのコントロールが提供されます。
- 投稿が保存されるときに分類値を保存します。
各ステップを見てみましょう。
WordPressによって作成されたデフォルトのメタボックスを非表示にする
このため、 register_taxonomy
を呼び出すときに、 meta_box_cb
show_in_quick_edit
をfalse
に設定する必要があります。
最初のオプションはクイック/バルク編集パネルで分類法を非表示にし、2番目のオプションは投稿編集ページで分類法を非表示にします。
register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));
デフォルトのメタボックスが非表示になっている場合、分類法管理ページを使用して、分類法の使用可能な用語のセットに項目を追加できます。

投稿編集ページでカスタムメタボックスを作成する
カスタムメタボックスを作成するには、 add_meta_boxes
フックを使用できます。 フックについて詳しくは、こちらをご覧ください。
add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }
次の引数を使用してadd_meta_box
メソッドを呼び出します。
-
taxonomy_box
–メタボックスのID -
__('Custom Exclusive Taxonomy')
–メタボックスのタイトル fill_custom_meta_box_content
–メタボックスの内容を入力するために使用される関数post
–これは、メタボックスが投稿編集ページに表示される必要があることを示します。-
side
–これはメタボックスを挿入する場所を示します。
IDとしてtaxonomy_box
を指定した方法に注目してください。 ただし、ボックスに何を入れるかを定義できるのは、3番目のパラメーターの関数です。
ここで、 fill_custom_meta_box_content
関数を実装します。
<?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }
ここでは、最初に分類法のすべての用語(つまり、既存の値)を取得しています。 これらを使用して、ラジオボタンコントロールのリストを表示します。
次に、 get_the_terms()
関数を使用して、現在選択されている分類用語を取得します。それぞれのラジオボタンを選択するために必要です。
この関数は配列を返すことに注意してください。 これは、デフォルトでは、投稿に任意の数の用語を関連付けることができるためです。 私たちの仮定では、投稿には最大で1つの項があるため、最初の配列要素にアクセスします。 (配列が空の場合は問題ありません。現在の値としてnull
が取得され、ラジオボタンは選択されません。)
HTML放出コードは、ラジオボタンの名前としてcustom_taxonomy
を使用し、値として対応する用語IDを使用します。 ラジオボタンID属性は、ラベルタグへの接続にのみ使用されます。 その結果、次のカスタムメタボックスが表示されます。
投稿を保存するときに分類値を保存する
最後に、投稿を保存するときに分類値を保持する必要があります。 このために、 save_post
フックを使用できます。
add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }
以上です! 完了です。
これで、組み込みのカテゴリ分類法のように動作するカスタム分類法を定義する方法がわかりました。
注:WordPressは、カスタム分類法の排他性を簡単に切り替えることができるようにするための機能リクエストを受け入れました。 しかし、チケットはしばらくの間あまり活動していません。
要約
分類法は、WordPressの非常に強力で便利な機能です。 箱から出して、投稿を厳密に分類する機能はありませんが、WordPressのほぼすべての機能と同様に、分類法と関連機能は非常にカスタマイズ可能です。 これにより、このしばしば必要な能力をいくつかのステップで追加することができます。
ここで紹介するアプローチは、分類用語を選択するための編集後のページでさらにカスタマイズされたUIを作成するためにも使用できます。
排他的なカスタム分類法の定義に関するこのクイックチュートリアルがお役に立てば幸いです。