web-dev-qa-db-fra.com

Ajouter une description à la taxonomie personnalisée admin metabox

J'ai créé une taxonomie personnalisée:

add_action( 'init', 'create_collection_taxonomies', 0 );
function create_collection_taxonomies() {
    $labels = array(
        'name'                       => _x( 'Collection Tags', 'taxonomy general name' ),
        'singular_name'              => _x( 'Collection Tag', 'taxonomy singular name' ),
        'search_items'               => __( 'Search Collection Tags' ),
        'popular_items'              => __( 'Popular Collection Tags' ),
        'all_items'                  => __( 'All Collection Tags' ),
        'parent_item'                => __( 'Parent Collection Tag' ),
        'parent_item_colon'          => __( 'Parent Collection Tag' ),
        'edit_item'                  => __( 'Edit Collection Tag' ),
        'update_item'                => __( 'Update Collection Tag' ),
        'add_new_item'               => __( 'Add New Collection Tag' ),
        'new_item_name'              => __( 'New Collection Tag Name' ),
        'menu_name'                  => __( 'Collections Tags' ),
    );

    $args = array(
        'description'           => 'Used to select promo/video for display in app.',
        'hierarchical'          => true,
        'labels'                => $labels,
        'show_ui'               => true,
        'show_admin_column'     => true,
        'query_var'             => true,
        'rewrite'               => array( 'slug' => 'CollectionTag' ),
    );

    register_taxonomy( 'CollectionTag', array('collection', 'videos', 'promos'), $args );
}

J'ai ajouté l'argument description en pensant qu'il figurerait dans la métaboxe de la taxonomie dans WP admin; cependant, cela ne semble pas être le cas.

J'ai trouvé ce message de 2011 , en disant qu'il me faudrait utiliser jQuery pour obtenir une description ajoutée à la boîte, mais il semble étrange que nous puissions définir une description sans pouvoir l'utiliser.

Est-ce que je comprends mal le but de cet argument avec ce que je lis dans le Codex ? Comment puis-je faire en sorte que cette description apparaisse dans la boîte méta de cette taxonomie?

2
Yazmin

En regardant les fichiers qui créent la metabox, il n’ya rien d’autoroute à ajouter qui puisse nous permettre d’ajouter la description, nous devrons donc utiliser jQuery. Comme le script est extrêmement petit, j'ai choisi de ne pas le placer dans un fichier externe, mais d'utiliser plutôt le admin_footer hook:

/**
 * Prepend taxonomy descriptions to taxonomy metaboxes
 */
function append_taxonomy_descriptions_metabox() {
    $post_types = array( 'page' );          // Array of Accepted Post Types
    $screen     = get_current_screen();     // Get current user screen

    if( 'edit' !== $screen->parent_base ) { // IF we're not on an edit page - just return
        return;
    }

    // IF the current post type is in our array
    if( in_array( $screen->post_type, $post_types ) ) {
        $taxonomies = get_object_taxonomies( $screen->post_type, 'objects' );   // Grab all taxonomies for that post type

        // Ensure taxonomies are not empty
        if( ! empty( $taxonomies ) ) : ?>

            <script type="text/javascript">

              <?php foreach( $taxonomies as $taxonomy ) : ?>

                var tax_slug = '<?php echo $taxonomy->name; ?>';
                var tax_desc = '<?php echo $taxonomy->description; ?>';

                // Add the description via jQuery
                jQuery( '#' + tax_slug + 'div div.inside' ).prepend( '<p>' + tax_desc + '</p>' );

              <?php endforeach; ?>

            </script>

        <?php endif;
    }
}
add_action( 'admin_footer', 'append_taxonomy_descriptions_metabox' );

Nous avons un tableau $post_types à tester afin de ne pas l'ajouter à la toutes type de publication ou à la toutes page, mais seulement à certaines pages. Nous pourrions faire la même chose pour les taxonomies mais je ne l’ai pas fait dans ce scénario.


MATERIEL BONUS

Le texte ci-dessous ajoute la description à la page Taxonomie de l'administrateur (où vous ajoutez de nouveaux termes). Nous utilisons un crochet add_action( '{$taxonomy}_pre_add_form' ) beaucoup plus facile:

/**
 * Prepend taxonomy description to Add New Term form
 */
function CollectionTag_admin_edit_description( $tax_slug ) {

    // Grab the Taxonomy Object
    $tax_obj = get_taxonomy( $tax_slug );

    // IF the description is set on our object
    if( property_exists( $tax_obj, 'description' ) ) {
        echo '<h2>Description</h2>';
        echo apply_filters( 'the_content', $tax_obj->description );
    }
}
add_action( 'CollectionTag_pre_add_form', 'CollectionTag_admin_edit_description' );
4
Howdy_McGee