¿Crear taxonomías “estáticas” para elegir, dentro del tipo de publicación personalizada?

5

Bien, entonces tengo un tipo de publicación personalizado llamado Blurbs (traducido, más o menos). Quiero agregar un conjunto estático de categorías para las publicaciones dentro de Blurbs (no quiero que el usuario pueda crear categorías personalizadas). Quiero dos tipos diferentes de categorías; Enlaces y extractos de página. Leí un poco y llegué a la conclusión de que las taxonomías son el camino a seguir para agregar estas "categorías" al tipo de publicación.

Llegué a crear la taxonomía, pero no quiero que esté visible en el menú. Solo quiero la casilla "categoría" en la pantalla de edición / publicación, con los dos elementos estáticos.

Esto es lo que tengo hasta ahora:

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

Al establecer show_ui en falso, desaparece de ambos lugares (menú y caja de enlaces).

Por lo tanto, las dos preguntas con las que necesito ayuda son:

1) ¿Cómo lo elimino del menú? 2) ¿Cómo le doy opciones "estáticas" (también conocidas como categorías) para elegir?

    
pregunta qwerty 18.10.2012 - 16:18

4 respuestas

2

1) Haz que sea show_ui => false

Luego, para mostrarlo en la pantalla de edición posterior, agregue el cuadro 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 cada término estático

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

Hay una forma mucho más sencilla (y más segura *) que ocultando la interfaz de usuario ( show_ui=false ) y agregando un metabox personalizado para mostrar solo los términos: eliminar la capacidad del usuario para administrar los términos.

Si elimina la capacidad del usuario para administrar términos, no solo tiene una solución segura, sino que la interfaz de usuario se encarga de sí misma. Como parte de register_taxonomy() , puede especificar las capacidades que el usuario debe tener para administrar / editar / eliminar y asignar términos.

 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 los tres primeros querrá configurar la capacidad para algo que el usuario no tiene. De hecho, dejarlo como arriba probablemente lo hará. Si usted aún desea administrar / editar / eliminar términos, siempre puede usar una capacidad que tiene pero su cliente sí (¿pueden, por ejemplo, manage_options )? Eso le permitirá crear y mantener la lista 'estática'. O simplemente puede hacerlo antes de realizar los cambios anteriores.

Por último, querrá dar una capacidad a assign_terms que el usuario tiene tiene. De forma predeterminada, es edit_posts , por lo que probablemente esté bien dejarlo así. Sin embargo, es posible que desee crear una nueva capacidad edit_blurb , de modo que pueda permitir que su usuario edite anuncios publicitarios, pero no publicaciones.

WordPress, luego se encarga del resto. Como el usuario no puede administrar / editar / eliminar términos, el menú de administración desaparece. Además, el metabox en la página de edición de anuncios solo muestra los términos existentes, y el usuario no puede agregar / eliminar ni editar ninguno.

* Recuerda que ocultar la IU no elimina la capacidad del usuario para editar y eliminar términos, simplemente la oculta.

    
respondido por el Stephen Harris 18.04.2015 - 00:41
0

Primero debe usar el menú para ir a la página de administración de taxonomía para agregar los valores estáticos que desea agregar, luego eliminarlos del consumo público.

Desde: enlace

Use la variable show_in_nav_menus en sus argumentos de taxonomía, es decir:

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

Este código ejecuta "wp_insert_term" solo cuando es necesario (solo cuando se consultan todos los términos) para obtener mejores resultados

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

Lea otras preguntas en las etiquetas