さて、私はBlurbsと呼ばれるカスタム投稿タイプを持っています(翻訳された、一種の)。 Blurbs内の投稿に静的なカテゴリのセットを追加したい(ユーザーにカスタムカテゴリを作成させたくない)。 2つの異なる種類のカテゴリが必要です。リンクとページの抜粋私は少し読みましたが、分類法が投稿タイプにこれらの「カテゴリ」を追加する方法であるという結論に達しました。
分類法を作成することができたのですが、メニューに表示したくありません。私は、編集/公開画面に2つの静的項目がある「category」ボックスが欲しいだけです。
これは私がこれまでに持っているものです:
$labels = array(
'name' => 'Categories',
'singular_name' => 'Category',
'search_items' => 'Search categories',
'all_items' => 'All categories',
'edit_item' => 'Change category',
'update_item' => 'Update category',
'add_new_item' => 'Create new category',
'new_item_name' => 'New category name'
);
register_taxonomy('categories', array('blurb'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
));
show_ui
をfalse
に設定することによって、それは両方の場所(メニューとリンクボックス)から消えます。
それで、私が助けを必要とする2つの質問はそれです:
show_ui => false
にする
その後、投稿編集画面に表示するには、ボックスを手動で追加します
add_action('add_meta_boxes', 'meta_boxes_function');
function meta_boxes_function() {
add_meta_box('categoriesdiv', 'categories', 'post_categories_meta_box', 'blurb', 'side', null, array('taxonomy' => 'categories'));
}
すべての静的用語にこのコードを使う
if(!term_exists('term1', 'categories'))
wp_insert_term('term1', 'categories');
ユーザーインターフェイスを非表示(show_ui=false
)にして、用語のみを表示するカスタムメタボックスを追加するよりもはるかに簡単な(そしてより安全な方法*)方法があります。用語を管理するユーザーの能力を削除します。
ユーザーが用語を管理する機能を削除すると、安全なソリューションが得られるだけでなく、ユーザーインターフェイスが自動的に処理します。 register_taxonomy()
の一部として、用語の管理/編集/削除および割り当てに必要な機能を指定できます。
register_taxonomy(
'categories',
array( 'blurb' ),
array(
...
'show_ui' => true,
'capabilities' => array(
'manage_terms' => 'a_capability_the_user_doesnt_have',
'edit_terms' => 'a_capability_the_user_doesnt_have',
'delete_terms' => 'a_capability_the_user_doesnt_have',
'assign_terms' => 'edit_posts'
),
...
)
)
最初の3つでは、機能をユーザーが持っていないものに設定します。実際、上記のようにそのままにしておくことはおそらく可能です。 yoがまだ用語を管理/編集/削除したい場合、あなたが持っている機能をいつでも使用できますが、クライアントは使用できます(たとえば、manage_options
?)。これにより、「静的」リストを作成および管理できます。または、上記の変更を行う前に単にそれを行うことができます。
最後に、ユーザーにassign_terms
doesが持つ機能を提供する必要があります。デフォルトでは、edit_posts
であるため、おそらくそのままにしておいてかまいません。ただし、新しい機能edit_blurb
を作成して、ユーザーが投稿ではなく宣伝文を編集できるようにすることができます。
その後、WordPressが処理します。ユーザーは用語の管理/編集/削除ができないため、管理メニューはなくなりました。さらに、blurb編集ページのメタボックスには既存の用語のみが表示され、ユーザーは追加/削除または編集できません。
* UIを非表示にしても、ユーザーの能力は削除されず、用語を編集および削除できます。
このコードは、パフォーマンスを向上させるために、必要なとき(すべての用語を照会するときだけ)に "wp_insert_term"を実行します。
register_taxonomy(
'categories',
null,
array(
'hierarchical' => true,
'labels' => array(
'name' => 'Categories'
),
'show_admin_column' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => array('slug' => 'categories'),
)
);
function create_default_taxonomies_values ($terms, $taxonomies, $args) {
if ($args['get'] != 'all') return $terms;
if (empty($taxonomies[0]) || $taxonomies[0] != 'categories') return $terms;
// default values here:
$default_values = array('Value 1', 'Value 2');
foreach ($default_values as $value) {
if (!term_exists($value, 'categories')) {
wp_insert_term($value, 'categories');
return get_terms($taxonomies, $args);
}
}
return $terms;
}
add_filter('get_terms', 'create_default_taxonomies_values', 10, 3);
まずメニューを使用して分類管理ページにアクセスし、追加する静的値を追加してから、それを一般消費から削除します。
投稿者: http://codex.wordpress.org/Function_Reference/register_taxonomy
分類引数にshow_in_nav_menus変数を使用します。
register_taxonomy('categories', array('blurb'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_in_nav_menus' => false,
));