web-dev-qa-db-ja.com

カスタム投稿タイプの中から選択する「静的な」分類法を作成しますか?

さて、私は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_uifalseに設定することによって、それは両方の場所(メニューとリンクボックス)から消えます。

それで、私が助けを必要とする2つの質問はそれです:

  1. メニューから削除する方法
  2. どのように私はそれから選択するためにそれに "静的な"オプション(別名カテゴリ)を与えるのですか?
6
qwerty
  1. 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'));
    }
    
  2. すべての静的用語にこのコードを使う

    if(!term_exists('term1', 'categories'))
        wp_insert_term('term1', 'categories');
    
2
Mridul Aggarwal

ユーザーインターフェイスを非表示(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_termsdoesが持つ機能を提供する必要があります。デフォルトでは、edit_postsであるため、おそらくそのままにしておいてかまいません。ただし、新しい機能edit_blurbを作成して、ユーザーが投稿ではなく宣伝文を編集できるようにすることができます。

その後、WordPressが処理します。ユーザーは用語の管理/編集/削除ができないため、管理メニューはなくなりました。さらに、blurb編集ページのメタボックスには既存の用語のみが表示され、ユーザーは追加/削除または編集できません。


* UIを非表示にしても、ユーザーの能力は削除されず、用語を編集および削除できます。

3
Stephen Harris

このコードは、パフォーマンスを向上させるために、必要なとき(すべての用語を照会するときだけ)に "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);
0
SLV

まずメニューを使用して分類管理ページにアクセスし、追加する静的値を追加してから、それを一般消費から削除します。

投稿者: 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,
      ));
0
Macgyver