web-dev-qa-db-fra.com

Nombre limité de mots dans la description de catégorie/terme - Panneau d'administration

Je travaille avec une taxonomie où les termes ont de longues descriptions. Le panneau d'administration a l'air vraiment moche quand WordPress essaie d'afficher ces descriptions pour 10 catégories. J'essaie de trouver un moyen de limiter le nombre de mots ou de caractères affichés dans la colonne Description de la catégorie/terme, mais je ne parviens pas à trouver le bon raccord pour accéder à la description de la catégorie telle qu'elle est affichée. J'utilise cette liste de crochets comme guide, et les deux crochets qui semblent pointer dans la bonne direction sont les suivants:

filtre: manage_taxonomies_for_{$post_type}_columns

function funcy_test($empty = '', $column, $term_id) 
{
    return '';
}
add_filter('manage_taxonomies_for_cpt_products_columns', 'funcy_test', 10, 3);

Je m'attendais à ce qu'il renvoie des colonnes vides tout autour mais je n'ai pas vu de résultat. Une solution possible consiste à supprimer complètement la catégorie Description et à utiliser le crochet custom_columns pour ajouter ma propre colonne de description, mais cela semble trop compliqué.

Existe-t-il un moyen de limiter les mots/caractères pour une description de terme dans le panneau d'administration?

1
Howdy_McGee

Ok, j'ai revisité cela et révisé ma réponse.

Mais comme je l'ai dit auparavant:

le crochet que vous (essayez) d'utiliser ne fonctionnera pas/ne fonctionnera pas dans le but que vous visez, tout simplement parce que sa seule occurrence est class-wp-posts-list-table.php, nom qui est au moins utilisé pour afficher la liste des publications, le bon endroit devrait être class-wp-terms-list-table.php.


1. Ce que vous pouvez faire est le suivant:

  • Utilisation du crochet admin_head-$hook_suffix et get_terms

    add_action(
        'admin_head-edit-tags.php',
        'wpse152619_edit_tags_trim_description'
    );
    function wpse152619_edit_tags_trim_description() {
        add_filter(
            'get_terms',
            'wpse152619_trim_description_callback',
            100,
            2
        );
    }
    
    function wpse152619_trim_description_callback( $terms, $taxonomies ) {
        // print_r($taxonomies);
        if( 'category' == $taxonomies[ 0 ] ) {
            foreach( $terms as $key => $term ) {
                $terms[ $key ]->description =
                    wp_trim_words(
                        $term->description,
                        12,
                        ' [...]'
                    );
            }
        }
        return $terms;
    }
    

    Cela réduit la description à un nombre de mots spécifié.


2. Une autre possibilité souvent trouvée consiste à supprimer la colonne par défaut et à en créer une nouvelle:

  • Utilisation du crochet manage_{$this->screen->taxonomy}_custom_column et manage_{$this->screen->id}_columns

    function wpse152619_create_new_description_column( $columns ) {
        if ( $_GET[ 'taxonomy' ] == 'category' ) {
            // uncomment next line to remove default description column
            //unset( $columns[ 'description' ] );
            // create new description column
            $columns[ 'new_description' ] = 'New Description';
            return $columns;
        }
        return $columns;
    }
    add_filter(
        'manage_edit-category_columns',
        'wpse152619_create_new_description_column'
    );
    
    
    function wpse152619_new_description_column_content(
        $deprecated,
        $column_name,
        $term_id
    ) {
        if ( $column_name == 'new_description' ) {
            $new_description =
                wp_trim_words(
                    term_description(
                        $term_id,
                        $_GET[ 'taxonomy' ]
                    ),
                    12,
                    ' [...]'
                );
            echo $new_description;
        }
    }
    add_filter(
        'manage_category_custom_column',
        'wpse152619_new_description_column_content',
        10,
        3
    );
    


3. Aussi possible serait:

  • Étendre la classe WP_List_Table vous-même, comme WP_Terms_List_Table c'est le cas;
  • Dans votre cas, l’objectif principal serait de redéfinir la méthode column_description;
  • En outre, créez un nouveau modèle, similaire à edit-tags.php, mais utilisant votre classe nouvellement créée;
  • Ensuite, vous devrez vous assurer que votre nouveau modèle est chargé à la place de celui par défaut.
  • Ok, mais ce n'est qu'un aperçu de ce qui serait possible aussi. Cela n'a aucun sens dans ce cas simple, mais pour les cas d'utilisation avancés, ce serait une approche à considérer.


Je suis sûr que ce qui précède devrait résoudre votre problème. Notez que j'ai fait les exemples pour la page d'édition de catégorie, mais la façon de procéder pour les taxonomies personnalisées devrait être évidente. En fonction des besoins, une approche simple ou élaborée peut être choisie. Dans votre cas, le premier devrait très bien se passer.

Enfin, la fonction suivante est pratique pour obtenir les informations dont vous avez besoin:

add_action( 'admin_head', 'wpse152619_dbg_dev' );
function wpse152619_dbg_dev() {
    global $pagenow;
    print_r( $pagenow );
    echo '<br>';
    print_r( $_GET[ 'taxonomy' ] );
    echo '<br>';
    $current_screen = get_current_screen();
    print_r( $current_screen->id );
}
3
Nicolai