it-swarm.com.de

Erstellen "statischer" Taxonomien zur Auswahl in benutzerdefinierten Beitragstypen?

Also gut, ich habe einen benutzerdefinierten Post-Typ namens Blurbs (übersetzt). Ich möchte einen statischen Satz von Kategorien für die Beiträge in Blurbs hinzufügen (ich möchte nicht, dass der Benutzer benutzerdefinierte Kategorien erstellen kann). Ich möchte zwei verschiedene Arten von Kategorien. Links und Seitenauszüge. Ich habe ein wenig gelesen und bin zu dem Schluss gekommen, dass Taxonomien der richtige Weg sind, um diese "Kategorien" zum Beitragstyp hinzuzufügen.

Ich habe die Erstellung der Taxonomie abgeschlossen, möchte sie jedoch nicht im Menü anzeigen. Ich möchte nur die "Kategorie" -Box auf dem Editier-/Veröffentlichungsbildschirm mit den beiden statischen Elementen.

Das habe ich bisher:

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

Wenn Sie den show_ui auf false setzen, wird er an beiden Stellen (Menü und Linkbox) ausgeblendet.

Die zwei Fragen, bei denen ich Hilfe brauche, sind:

  1. Wie entferne ich es aus dem Menü?
  2. Wie gebe ich es "statische" Optionen (aka Kategorien) zur Auswahl?
6
qwerty
  1. Mach es show_ui => false

    Fügen Sie das Feld dann manuell hinzu, um es auf dem Bildschirm für die Nachbearbeitung anzuzeigen

    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. verwenden Sie diesen Code für jeden statischen Begriff

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

Es gibt eine viel einfachere (und sicherere *) Möglichkeit, als die Benutzeroberfläche (show_ui=false) auszublenden und eine benutzerdefinierte Metabox hinzuzufügen, um nur Begriffe anzuzeigen: Die Möglichkeit des Benutzers, Begriffe zu verwalten, wird entfernt.

Wenn Sie die Fähigkeit des Benutzers zum Verwalten von Begriffen aufheben, haben Sie nicht nur eine sichere Lösung, sondern die Benutzeroberfläche kümmert sich um sich selbst. Im Rahmen der register_taxonomy() können Sie die Funktionen angeben, die der Benutzer zum Verwalten/Bearbeiten/Löschen und Zuweisen von Begriffen benötigen muss.

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

Bei den ersten drei möchten Sie die Funktion auf etwas einstellen, das der Benutzer nicht hat. In der Tat wird es wahrscheinlich ausreichen, es wie oben zu belassen. Wenn Sie weiterhin Begriffe verwalten/bearbeiten/löschen möchten, können Sie immer eine Funktion verwenden, über die Sie verfügen, Ihr Client jedoch verfügt (können sie beispielsweise manage_options sein?). Auf diese Weise können Sie die "statische" Liste erstellen und verwalten. Oder Sie können dies einfach tun, bevor Sie die obigen Änderungen vornehmen.

Zuletzt möchten Sie dem Benutzer does have eine Funktion für assign_terms geben. Standardmäßig ist es edit_posts, daher können Sie es wahrscheinlich so belassen. Möglicherweise möchten Sie jedoch eine neue Funktion edit_blurb erstellen, damit Ihr Benutzer Klappentexte, jedoch keine Posts bearbeiten kann.

WordPress erledigt dann den Rest. Da der Benutzer Begriffe nicht verwalten, bearbeiten oder löschen kann, ist das Admin-Menü nicht mehr verfügbar. Darüber hinaus werden in der Metabox auf der Seite "Klappentext bearbeiten" nur vorhandene Begriffe angezeigt, und der Benutzer kann keine hinzufügen/entfernen oder bearbeiten.


* Denken Sie daran, dass durch das Ausblenden der Benutzeroberfläche nicht die Fähigkeit des Benutzers zum Bearbeiten und Löschen von Begriffen entfernt wird, sondern nur ausgeblendet wird.

3
Stephen Harris

Dieser Code führt "wp_insert_term" nur bei Bedarf aus (nur bei der Abfrage nach allen Begriffen), um eine bessere Leistung zu erzielen

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

Sie sollten zuerst das Menü verwenden, um zur Taxonomie-Verwaltungsseite zu gelangen, um die statischen Werte hinzuzufügen, die Sie hinzufügen möchten, und sie dann aus dem öffentlichen Verbrauch zu entfernen.

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

Verwenden Sie die Variable show_in_nav_menus in Ihren Taxonomieargumenten, d. H .:

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