Question

Je me demandais s'il y avait un moyen d'empêcher l'ajout de nouvelles catégories dans une taxonomie, essentiellement « verrouillage » de la taxonomie.

Je me inscris une taxonomie et programatically le remplir avec des termes par functions.php et je voudrais si vous ne pouvez pas ajouter plus en elle.

La vision, RÉALISÉ ...

Voici comment ma solution a fini par la recherche, et il fonctionne très bien! Merci à tous ceux qui ont aidé. Upvotes partout dans votre visage!

// 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' );
Était-ce utile?

La solution

Catégories, Tags & taxonomies

Tout d'abord je veux faire celui-ci clairement: Tout est Taxonomy . Mots-clés est un non-hiérarchique, les catégories une structure hiérarchique et les deux sont intégrés taxonomies. Même chose pour exemple. formats post (mis à part, le chat, etc.). Il est le même concept que de post-types (poste, page, pièce jointe, nav_menu_item, etc. sont tous à construire dans les types post).

Tout à l'intérieur d'un de ces taxonomies est un Term . Pour exemple. (À l'intérieur des formats post) "de côté", "citation", "audio".

Codex Liens

Le concept

Ce qui suit est pour votre fichier functions.php. Cela déclenche à chaque demande de page. Vous pouvez l'améliorer - en utilisant l'API Transitoires - à un déclenchement sur horodatages données (par exemple, deux fois par jour, toutes les heures,. etc.).

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' );

Autres conseils

Si vous ajoutez des termes dans la taxonomie et que vous voulez indépendamment cacher l'interface utilisateur, pourquoi ne pas utiliser simplement deux des arguments soutenus par register_taxonomy.

capacités (Matrice) (en option) un tableau des capacités pour ce taxonomie.

Par défaut: Aucun

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

show_ui (Boolean) (en option) Que ce soit pour générer une interface utilisateur par défaut la gestion de cette taxonomie.

Par défaut: si non défini, par défaut la valeur de l'argument du public

Définissez les capacités de certaines capacités inexistantes et vous essentiellement empêcher les utilisateurs de pouvoir modifier, créer ou les supprimer. Si vous devez être en mesure de les affecter à des postes de façon traditionnelle (ie. Par l'éditeur de messages), il suffit d'utiliser une capacité réelle pour la valeur assign_terms.

Exemple:

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

Set show_ui false et vous empêchez les éléments de menu étant affiché pour la taxonomie.

L'espoir qui aide ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top