Criando taxonomias “estáticas” para escolher, dentro do tipo de post personalizado?

5

Tudo bem, então eu tenho um tipo de post personalizado chamado Blurbs (traduzido, tipo de). Eu quero adicionar um conjunto estático de categorias para as postagens dentro dos Blurbs (eu não quero que o usuário seja capaz de criar categorias personalizadas). Eu quero dois tipos diferentes de categorias; links e trechos de página. Fiz algumas leituras e cheguei à conclusão de que taxonomias é o caminho a seguir para adicionar essas "categorias" ao tipo de postagem.

Cheguei até a criar a taxonomia, mas não a quero visível no menu. Eu só quero a caixa "category" na tela de edição / publicação, com os dois itens estáticos.

Isso é o que eu tenho até agora:

      $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,
      ));

Ao definir o show_ui como false, ele desaparece dos dois locais (menu e caixa de links).

Então, as duas perguntas que eu preciso de ajuda são:

1) Como faço para removê-lo do menu? 2) Como posso escolher opções "estáticas" (também conhecidas como categorias)?

    
por qwerty 18.10.2012 / 16:18

4 respostas

2

1) Torne show_ui => false

Em seguida, para mostrá-lo na tela de edição de post, adicione a caixa manualmente

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) use este código para todo termo estático

if(!term_exists('term1', 'categories'))
    wp_insert_term('term1', 'categories');
    
por Mridul Aggarwal 18.10.2012 / 16:40
2

Há uma maneira muito mais simples (e mais segura *) do que ocultar a interface do usuário ( show_ui=false ) e adicionar um metabox personalizado para exibir apenas os termos: removendo a capacidade do usuário de gerenciar termos.

Se você remover a capacidade do usuário de gerenciar os termos, não apenas terá uma solução segura, mas a interface do usuário cuidará de si mesma. Como parte do register_taxonomy() , você pode especificar os recursos que o usuário deve ter para gerenciar / editar / excluir e atribuir termos.

 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'
      ),
      ...
    )
 )

Para os três primeiros, você desejará definir a capacidade para algo que o usuário não tenha. De fato, deixá-lo como acima provavelmente fará. Se você ainda quiser gerenciar / editar / excluir termos, sempre poderá usar um recurso que você tem, mas o seu cliente, (eles podem manage_options , por exemplo?). Isso permitirá que você crie e mantenha a lista 'estática'. Ou você pode simplesmente fazer isso antes de fazer as alterações acima.

Por último, você vai querer dar uma capacidade para assign_terms o usuário tem . Por padrão, é edit_posts , então você provavelmente está ok para deixar por aqui. No entanto, talvez você queira criar um novo recurso edit_blurb , para permitir que o usuário edite as sinopse, mas não as postagens.

WordPress, então cuida do resto. Como o usuário não pode gerenciar / editar / excluir termos, o menu do administrador desapareceu. Além disso, o metabox na página de edição exibe apenas os termos existentes e o usuário não pode adicionar / remover ou editar nenhum.

* Lembre-se de que ocultar a interface do usuário não remove a capacidade do usuário para editar e excluir termos, apenas oculta.

    
por Stephen Harris 18.04.2015 / 00:41
0

Primeiro, você deve usar o menu para acessar a página de gerenciamento de taxonomia para adicionar os valores estáticos que deseja adicionar e, em seguida, removê-lo do consumo público.

De: enlace

Use a variável show_in_nav_menus em seus argumentos de taxonomia, por exemplo:

register_taxonomy('categories', array('blurb'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_in_nav_menus' => false,
      ));
    
por Macgyver 18.10.2012 / 16:36
0

Este código executa "wp_insert_term" somente quando necessário (somente ao consultar todos os termos) para melhores desempenhos

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);
    
por SLV 17.04.2015 / 23:21