web-dev-qa-db-fra.com

Créer des taxonomies "statiques" parmi lesquelles choisir, dans un type de post personnalisé?

Bon, j'ai donc un type de message personnalisé appelé Blurbs (traduit, en quelque sorte). Je souhaite ajouter un ensemble statique de catégories pour les publications dans Blurbs (je ne veux pas que l'utilisateur puisse créer des catégories personnalisées). Je veux deux types de catégories différentes; liens et extraits de pages. J'ai lu un peu et je suis arrivé à la conclusion que les taxonomies sont la voie à suivre pour ajouter ces "catégories" au type d'article.

Je suis allé aussi loin que de créer la taxonomie, mais je ne veux pas que cela soit visible dans le menu. Je veux juste la "catégorie" -box sur l'écran d'édition/publication, avec les deux éléments statiques.

C'est ce que j'ai jusqu'à présent:

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

En définissant show_ui sur false, il disparaît des deux emplacements (menu et zone de liens).

Donc, les deux questions pour lesquelles j'ai besoin d'aide sont:

  1. Comment puis-je le supprimer du menu?
  2. Comment puis-je lui donner des options "statiques" (catégories aka) à choisir?
6
qwerty
  1. Faites-le show_ui => false

    Ensuite, pour l'afficher sur l'écran de modification, ajoutez la boîte manuellement.

    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. utiliser ce code pour chaque terme statique

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

Il existe un moyen beaucoup plus simple (et plus sûr * *) que de masquer l'interface utilisateur (show_ui=false) et d'ajouter une metabox personnalisée pour afficher uniquement les termes: supprimer la capacité de l'utilisateur à gérer les termes.

Si vous supprimez la capacité de l'utilisateur à gérer les termes, vous disposez non seulement d'une solution sécurisée, mais l'interface utilisateur se gère elle-même. Dans le cadre de register_taxonomy(), vous pouvez spécifier les fonctionnalités dont l'utilisateur doit disposer pour gérer/modifier/supprimer et attribuer des conditions.

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

Pour les trois premiers, vous souhaiterez définir la capacité sur quelque chose que l'utilisateur n'a pas. En fait, le laisser comme ci-dessus fera probablement. Si vous souhaitez toujours gérer/modifier/supprimer des termes, vous pouvez toujours utiliser une fonctionnalité que vous possédez mais que votre client utilise (peut-il manage_options, par exemple?). Cela vous permettra de créer et de gérer la liste "statique". Ou vous pouvez simplement le faire avant d’apporter les modifications ci-dessus.

Enfin, vous voudrez donner la possibilité à assign_terms l'utilisateur est have. Par défaut, il s’agit de edit_posts, vous pouvez donc en rester là. Cependant, vous souhaiterez peut-être créer une nouvelle capacité edit_blurb, afin de permettre à votre utilisateur de modifier le texte de présentation, mais pas les publications.

WordPress, puis gère le reste. Comme l'utilisateur ne peut pas gérer/éditer/supprimer les termes, le menu admin a disparu. De plus, la metabox de la page d'édition du blurb n'affiche que les termes existants et l'utilisateur ne peut en ajouter/supprimer ni en modifier.


* N'oubliez pas que masquer l'interface utilisateur ne supprime pas la capacité capacité de l'utilisateur à modifier et supprime les termes, il la masque simplement.

3
Stephen Harris

Ce code exécute "wp_insert_term" uniquement lorsque cela est nécessaire (uniquement lors de la recherche de tous les termes) pour de meilleures performances.

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

Vous devez d’abord utiliser le menu pour accéder à la page de gestion de la taxonomie afin d’ajouter les valeurs statiques que vous souhaitez ajouter, puis retirez-les de la consommation publique.

De: http://codex.wordpress.org/Function_Reference/register_taxonomy

Utilisez la variable show_in_nav_menus dans vos arguments de taxonomie, à savoir:

register_taxonomy('categories', array('blurb'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_in_nav_menus' => false,
      ));
0
Macgyver