カスタム分類入力の外観の変更


14

いくつかのカスタム分類(カスタム投稿タイプ用)を利用するサイトに取り組んでいます。このサイトでは、値を入力する方法(チェックボックス)が、非階層的な分類法の自由形式の入力よりも望ましいため、分類法の一部を階層化することを選択しました。ただし、私が本当に欲しいの、チェックボックスの代わりにラジオボタン入力を使用できるようにすることです。さらに、分類法で親アイテムを選択するために使用されるドロップダウンを削除したいと思います。 スクリーンショット

私はこれについて間違った方法で行っていますか?非階層的な分類から始めて、代わりにそれらの入力メソッドを変更する必要がありますか?私は完全に入力に対してオープンであり、質問に喜んで答えるか、できればより多くの情報を提供します。


+1良い質問。これは、私が取り組んでいるプロジェクトにとっても良いことです。さらに、「カテゴリ」のリストではなく、カスタム分類をドロップダウンメニューにします。
ザック

ええ、ドロップダウンも素晴らしいでしょう。
トラビスノースカット

1
これら2つは非常によく似た問題を扱っているようです:カスタム投稿タイプ-分類ドロップダウンメニュー?そして、保存分類規約に必要なヘルプ
ミハル・マウ

既存のメタボックスを変更するのではなく、特定の分類法のデフォルトメタボックスを削除し、ラジオグループの用語を表示するカスタム関数を呼び出す独自のメタボックスを登録することで、上記のmauglyによる2つのリンク。
t31os

回答:


13

確かに、CSSと'admin_head'フックを使用して非表示にします。これがあなたが探しているものだと思いますか?

親のないWordPress投稿ページの階層分類エントリ
(ソース:mikeschinkel.com

テーマのfunctions.phpファイルまたは作成している.php可能性のあるプラグインのファイルに次を追加するだけです。「Home」投稿タイプと「Bath」分類法'init'を定義するフックを含めたことで、他の人がより簡単に例に従うことができることに注意してください。また、分類法の名前がBathsである場合は、CSSセレクターを次のように変更する必要があることに注意してください。#newbaths_parent#newbath_parent

add_action('admin_head','remove_bath_parents');
function remove_bath_parents() {
  global $pagenow;
  if (in_array($pagenow,array('post-new.php','post.php'))) { // Only for the post add & edit pages
    $css=<<<STYLE
<style>
<!--
#newbath_parent {
  display:none;
}
-->
</style>
STYLE;
    echo $css;
  }
}
add_action('init','add_homes_and_baths');
function add_homes_and_baths() {
  register_post_type('home',
    array(
      'label'           => 'Homes',
      'public'          => true,
      'rewrite'         => array('slug' => 'homes'),
      'hierarchical'    => false,
    )
  );
  register_taxonomy('bath', 'home', array(
    'hierarchical'    => true,
    'label'           => 'Baths',
    'rewrite'         => array('slug' => 'baths' ),
    )
  );
}

更新

だから、質問のラジオボタンの部分を見逃しようです。残念ながら、WordPressは簡単にこれを行うことはありませんが、あなたは使用してそれを実現することができますPHPの出力バッファリングを (経由ob_start()してob_get_clean()機能します。) metaboxが出力(ある前にだけフックを見つける'add_meta_boxes')とフックは、それが出力である(後'dbx_post_sidebar')、その後、捕獲検索しますのHTMLを'checkbox'に置き換え'radio'、画面にエコーし、完了です!コードは次のとおりです。

add_action('add_meta_boxes','mysite_add_meta_boxes',10,2);
function mysite_add_meta_boxes($post_type, $post) {
  ob_start();
}
add_action('dbx_post_sidebar','mysite_dbx_post_sidebar');
function mysite_dbx_post_sidebar() {
  $html = ob_get_clean();
  $html = str_replace('"checkbox"','"radio"',$html);
  echo $html;
}

そして証拠:

ラジオボタンを使用した分類法を示すスクリーンショット
(ソース:mikeschinkel.com


1
「まあ、親フィールドがない!」マイク、笑ってた!:D
ミハル・マウ

@maugly-それが私のデフォルトです。:D
マイクシンケル

@haha-気に入ってくれてうれしい。:)
MikeSchinkel

いつものように素晴らしい。
トラビスノースカット

1
@tnorthcutt-率直に言って、独自のメタボックスをコーディングすることをお勧めします。それは私がやったことであり、これは本当に難しくありません。ソースを表示し、一致<input><select>名前を入力するだけで、分類をキャプチャするために何もする必要はありません。WordPressが自動的に行います。または、カスタムフィールドを使用し、これには過剰な分類法をバイパスします。
MikeSchinkel

2

または、あなたが怠け者なら、このプラグインを使用できます:単一値分類UI

(マイクの答えにコメントとしてこれを追加したいのですが、ほとんど同じことをしますが、まだコメントを追加できません)


残念ながら2年間は更新されません:(これは、オプションである場合、多くの人がオブジェクトごとに1項の分類法を使用する(つまり、クエリパフォーマンスが重要な場合はメタではなく分類法を使用します)
jerclarke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.