web-dev-qa-db-fra.com

Puis-je empêcher l'utilisateur d'ajouter plus de deux niveaux de termes dans une métaboxe de taxonomie?

Je suis en train de créer une structure de didacticiel à niveaux dans WordPress et je souhaite la construire de manière à ce qu'elle installe l'interface sans aucun code requis de l'utilisateur.

Jusqu'à présent, j'ai un type de publication personnalisé appelé 'tut_page' qui contient une métaboxe pour la taxonomie personnalisée appelée 'tut_group' et des termes peuvent être ajoutés via la métaboxe de taxonomie. Pour mon register_taxonomy, la valeur de 'hierarchical' a été définie sur true. Donc, je veux des niveaux, mais je ne veux pas plus de deux profondeurs. Je sais que je peux choisir le nombre de niveaux de termes à afficher dans un modèle, mais y a-t-il un moyen d'empêcher les utilisateurs de créer des termes plus profonds que deux niveaux à partir de la métaboxe de taxonomie?

Voici ce que j'ai dans functions.php pour enregistrer la taxonomie:

function create_tutorial_topic() {
    register_taxonomy(
        'tut_group', //name of taxonomy
        'tut_post', //object type e.g. our post type
        array(
                'labels' => array(
                'name' => _x( 'Tutorial Group', 'taxonomy general name' ),
                'singular_name' => _x( 'Tutorial Groups', 'taxonomy singular name' ),
                'search_items' =>  __( 'Search Tutorial Groups' ),
                'all_items' => __( 'All Tutorial Groups' ),
                'parent_item' => __( 'Parent Tutorial Groups' ),
                'parent_item_colon' => __( 'Parent Tutorial Groups:' ),
                'edit_item' => __( 'Edit Tutorial Group' ),
                'update_item' => __( 'Update Tutorial Group' ),
                'add_new_item' => __( 'Add Tutorial Group' ),
                'new_item_name' => __( 'New Tutorial Group' ),
                'menu_name' => __( 'Tutorial Group' ),
            ),
            'rewrite' => array( 'slug' => 'tutorial-group' ),
            'hierarchical' => true, //this is true but I only want two levels deep
        )
    );
}

Je voudrais aussi construire autant que je peux moi-même sans avoir à utiliser un plugin. J'ai essayé de chercher sur ce site et j'ai trouvé des questions sur la limitation du nombre de termes, mais pas sur les niveaux de hiérarchie. Merci pour tous les conseils à l'avance!

1
RachieVee

Malheureusement, ce n'est pas possible, du moins pas sûr.

La fonction wp_insert_term( $term, $taxonomy, $args = array() ) qui gère la création de taxonomies fournit quelques filtres et crochets, mais le seul avant la création du terme dans la base de données est

$term = apply_filters( 'pre_insert_term', $term, $taxonomy );

Comme vous pouvez le constater, les $args fournis dans la création du terme ne sont pas transmis au filtre. Vous n'avez donc aucun moyen de vérifier le nombre de niveaux de la taxonomie existant en consultant $args['parent'].

Une façon laide de le faire serait après la création du terme, en s’accrochant à l’action created_term ou create_term et en la vérifiant à cet endroit. Je ne l'ai jamais fait moi-même et vous pouvez ouvrir une boîte de Pandore en supprimant le terme après la création, sans possibilité de retourner une erreur par la suite.

Si le filtre pre_insert_term accepte le $args comme argument, cela ne me pose aucun problème.

1
fischi