it-swarm.com.de

Gibt es eine Möglichkeit, eine Taxonomie zu sperren?

Ich habe mich gefragt, ob es eine Möglichkeit gibt, das Hinzufügen neuer Kategorien zu einer Taxonomie zu verhindern, indem die Taxonomie im Wesentlichen „gesperrt“ wird.

Ich registriere programmatisch eine Taxonomie und fülle sie mit Begriffen über functions.php und möchte, dass Sie nichts mehr hinzufügen können.

Die Vision, REALISIERT ...

Hier ist, wie meine Lösung aussah, und es funktioniert großartig! DANKE an alle, die mitgeholfen haben. Upvotes überall in deinem Gesicht!

// some stuff happens before this...
    $labels = array(
        'name' => _x( 'Attendees', 'taxonomy general name' ),
        'singular_name' => _x( 'Attendee', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Attendees' ),
        'all_items' => __( 'All Attendees' ),
        'edit_item' => __( 'Edit Attendee' ), 
        'update_item' => __( 'Update Attendee' ),
        'add_new_item' => __( 'Add New Attendee' ),
        'new_item_name' => __( 'New Attendee Name' ),
        'menu_name' => __( 'Attendees' )
    );
    $rewrite = array(
        'slug' => 'attendee'
    );
    $capabilities = array(
        'manage_terms' => 'nobody',
        'edit_terms' => 'nobody',
        'delete_terms' => 'nobody',
        'assign_terms' => 'nobody'
    );
    $args = array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => 'attendee',
        'rewrite' => $rewrite,
        'capabilities' => $capabilities
    );
    register_taxonomy('attendees', 'meetings', $args);
}
add_action( 'init', 'todo_create_taxonomies', 1);
function todo_register_attendees() {
    $users = get_users();
    foreach ( $users as $user ) {
        wp_insert_term( $user->display_name, 'attendees', array('description'=> $user->display_name, 'slug' => $user->user_nicename) );
        $lockdown[] = $user->user_nicename;
    }
    $terms = get_terms('attendees', array('get' => 'all') );
    foreach ($terms as $term) {
        if ( !in_array($term->slug, $lockdown) ) {
            wp_delete_term( $term->term_id, 'attendees' );
            $message = new WP_Error('force_terms', __('Only Registered Users can be Attendees, ' . $term->name . ' has been deleted.'));
            if ( is_wp_error($message) ) { ?>
                <div id="aphid-error-<?php echo $message->get_error_code(); ?>" class="error aphid-error"> 
                    <p><strong><?php echo $message->get_error_message(); ?></strong></p>
                </div>
            <?php }
        }
    }
}
add_action( 'admin_notices', 'todo_register_attendees' );
6
Drew Gourley

Kategorien, Tags und Taxonomien

Zuerst möchte ich folgendes klarstellen: Alles ist eineTaxonomie. Tags sind nicht hierarchisch, Categories sind hierarchisch und beide sind eingebaute Taxonomien. Gleiches gilt zB für. Post-Formate (beiseite, Chat, etc.). Es ist das gleiche Konzept wie bei Post-Typen (Post, Seite, Anhang, nav_menu_item usw. sind alle nur in Post-Typen integriert).

Alles in einer dieser Taxonomien ist einTerm. Zum Beispiel. (innerhalb von Postformaten) "beiseite", "Zitat", "Audio".

Codex-Links

  • register_taxonomy() - ermöglicht es Ihnen, eine Taxonomie von ex zu registrieren. in deiner functions.php Datei.
  • wp_insert_term() - ermöglicht es Ihnen, einen Begriff zu registrieren
  • wp_delete_term() - ermöglicht es Ihnen, einen Begriff zu löschen
  • get_terms() - ermöglicht das Abrufen aller Begriffe aus einer bestimmten Taxonomie

Das Konzept

Folgendes gilt für Ihre functions.php-Datei. Dies wird bei jeder Seitenanforderung ausgelöst. Sie können es verbessern - indem Sie die Transients-API - verwenden, um bestimmte Zeitstempel auszulösen (z. B. zweimal täglich, stündlich usw.).

function wpse14350_cleanup_taxonomy_terms()
{
    // Define your terms inside this array
    $predefined_terms = array(
         'term A'
        ,'term B'
        ,'term C'
    );
    // Name your taxonomy here
    $predefined_taxonomy = 'category';

    $all_terms_inside_tax = get_terms( 
         $predefined_taxonomy
        ,array(
             'hide_empty'   => false
            ,'taxonomy'     => $predefined_taxonomy
        ) 
    );

    foreach ( $all_terms_inside_tax as $term )
    {
        if ( ! in_array( $term->name, $predefined_terms ) )
            wp_delete_term( $term->term_id, $predefined_taxonomy );
    }
}
add_action( 'init', 'wpse14350_cleanup_taxonomy_terms' );
3
kaiser

Wenn Sie der Taxonomie unabhängig Begriffe hinzufügen und die Benutzeroberfläche ausblenden möchten, können Sie einfach zwei der von register_taxonomy unterstützten Argumente verwenden.

Fähigkeiten
(Array) (optional) Ein Array der Funktionen für diese Taxonomie.

Standardeinstellung: Keine

'manage_terms' - 'manage_categories'
'edit_terms' - 'manage_categories'
'delete_terms' - 'manage_categories'
'assign_terms' - 'edit_posts'

show_ui
(Boolean) (optional) Gibt an, ob eine Standardbenutzeroberfläche zum Verwalten dieser Taxonomie generiert werden soll.

Standard: Wenn nicht festgelegt, wird standardmäßig der Wert des öffentlichen Arguments verwendet

Setzen Sie die Funktionen auf einige nicht vorhandene Funktionen, und Sie verhindern im Wesentlichen, dass Benutzer sie ändern, erstellen oder löschen können. Wenn Sie sie auf herkömmliche Weise (z. B. über den Post-Editor) Posts zuweisen können müssen, verwenden Sie einfach eine echte Funktion für den Wert assign_terms.

Beispiel:

$args = array(

....

    'capabilities' => array(
        'manage_terms' => 'foobar',
        'edit_terms'   => 'foobar',
        'delete_terms' => 'foobar',
        'assign_terms' => 'foobar' // <-- change this one to a desired cap if you need to be able to assign them(you could use manage_options for admins only)
    ),
);

Setzen Sie show_ui auf false, um zu verhindern, dass Menüelemente für die Taxonomie angezeigt werden.

Hoffentlich hilft das...

6
t31os