web-dev-qa-db-fra.com

Colonnes personnalisées sur la page principale edit-tags.php

J'essaie d'ajouter des colonnes personnalisées à edit-tags.php pour une taxonomie personnalisée que j'ai créée. Cette taxonomie personnalisée est appelée type d'équipement et ne s'applique qu'à un seul type de poste personnalisé appelé équipement. J'essaie d'utiliser les mêmes filtres et actions que ceux que j'utiliserais pour ajouter des colonnes personnalisées sur la page edit.php. J'ai pu créer les colonnes personnalisées avec ce filtre:

add_filter('manage_edit-equipment-types_columns', 'define_equip_types_columns');

Cependant, je n'arrive pas à remplir ces colonnes avec des données. Normalement, pour la page edit.php, j'utiliserais l'action suivante:

add_action('manage_posts_custom_column', 'my_post_type_columns_content'));

Et ensuite, dans la fonction my_post_type_columns_content, je générerais de manière conditionnelle les données de colonne en fonction du post-type.

Le problème est que je n'arrive pas à trouver un crochet similaire pour la page edit-tags. Le site Web d'Adam Brown énumère ces points:

manage_blogs_custom_column

manage_comments_custom_column

manage_comments_nav

manage_link_custom_column

manage_media_custom_column

manage_media_media_column

manage_pages_custom_column

manage_plugins_custom_column

manage_posts_custom_column

manage_sites_custom_column

manage_themes_custom_column

manage_{$post->post_type}_posts_custom_column

Aucun de ce que je pense serait une quelconque aide. Est-ce que quelqu'un connaît un moyen de faire cela? Je suis si proche, j'ai les colonnes créées avec les titres, il me suffit de les remplir avec des données!

EDIT: Pour être clair, je ne cherche pas à créer des champs personnalisés. J'essaie de créer des colonnes personnalisées dans le tableau à droite sur la page de taxonomie principale.

Régulièrement sur la page edit.php où il affiche Toutes les publications pour ce type de publication, je peux créer des colonnes personnalisées telles que la colonne des quantités, comme suit:

enter image description here

Cependant, je ne pense pas qu'il existe un crochet pour renseigner les colonnes de la page principale edit-tags.php, même si je peux créer une colonne personnalisée telle que l'URL de l'image ci-dessous:

enter image description here

5
IV4

Vous pouvez le faire en vous connectant aux actions 'taxonomy'_edit_form et eded_'taxonomy'.

add_action('taxonomy_edit_form', 'foo_render_extra_fields');
function foo_render_extra_fields(){
    $term_id = $_GET['tag_ID'];
    $term = get_term_by('id', $term_id, 'taxonomy');
    $meta = get_option("taxonomy_{$term_id}");
    //Insert HTML and form elements here
}

add_action('edited_taxonomy', 'bar_save_extra_fields', 10, 2);
function bar_save_extra_fields($term_id){
    $form_field_1 = $_REQUEST['field-name-1'];
    $form_field_2 = $_REQUEST['field-name-2'];
    $meta['key_value_1'] = $form_field_1;
    $meta['key_value_2'] = $form_field_2;
    update_option("taxonomy_{$term_id}", $meta);
}

Veillez à modifier la "taxonomie" dans l'exemple de code avec votre taxonomie personnalisée. Sachez que ceci ne s'affiche que lorsqu'un utilisateur modifie une étiquette ou une catégorie.

Mise à jour pour ajouter des colonnes à la table d'édition des étiquettes:

function add_post_tag_columns($columns){
    $columns['foo'] = 'Foo';
    return $columns;
}
add_filter('manage_edit-post_tag_columns', 'add_post_tag_columns');

function add_post_tag_column_content($content){
    $content .= 'Bar';
    return $content;
}
add_filter('manage_post_tag_custom_column', 'add_post_tag_column_content');

Ça fonctionne super bien! Voici une capture d'écran: http://3-3.me/lFdf

5
Brian Fegter

Juste pour la postérité, parce que, comme @ IV4, j'avais encore quelques disputes à faire avec la réponse de @ Brian pour que cela fonctionne pour une taxe sur mesure:

add_filter( "manage_{screen_id}_columns", "column_header_function" ) );  
add_action( "manage_{tax_slug}_custom_column",  "populate_rows_function"), 10, 3  ); 

Donc, dans mon cas, ma taxonomie personnalisée était "catégorie de produit", elle ressemblait donc à ceci:

add_filter( "manage_edit-product-category_columns", array ( __CLASS__, "populate_edit_page_column_header" ) );  
add_action( "manage_product-category_custom_column",  array ( __CLASS__, "populate_edit_page_columns"), 10, 3  );

Il convient également de noter (même si les vétérans le savent déjà) que pour une colonne personnalisée de taxonomie, vous pouvez UNIQUEMENT créer des données de ligne personnalisées pour les colonnes qui ne sont pas définies par défaut. La raison en est que, dans la classe WP_Terms_List_Table, contrairement à la façon dont fonctionne la classe WP_Posts_List_Table, l'action de colonne personnalisée est only appelée via la méthode column_default, qui n'est appelée que si le nom de la colonne ne le permet pas. correspond à l'une des colonnes par défaut définies dans cette classe (cb, description, liens, nom, publications, slug).

Dans mon cas, je voulais modifier la colonne de description, mais je devais recourir à la création d'une colonne personnalisée appelée "résumé". Notez également que les colonnes personnalisées doivent être ajoutées au filtre de tri si vous souhaitez trier sur cette colonne (bien que le tri sur une colonne de description n'ait pas de sens dans mon cas).

En termes de signature de fonction de l'action, il peut prendre jusqu'à 3 arguments, dont le premier est en fait inutile (ce qui me fait me demander comment la réponse de @ Brian a fonctionné):

function my_custom_columns( $value, $column, $term_id ){ }

$value est pratiquement vide, $column correspond à ce que vous voulez activer et $term_id peut être très important si vous devez référencer les données contenues dans votre terme!

4
Tom Auger

Pour ajouter sur l'écran principal:

add_action( '<taxonomy-name>_add_form_fields', 'addfields' );
function addfields() {
    echo "<div class='form-field'><label>Wassup</label><textarea></textarea></div>";
}

Pour ajouter un formulaire d'édition de terme individuel:

add_action( '<taxonomy-name>_edit_form_fields', 'editfields' );
function editfields() {
    echo "<tr class='form-field'><th>Wassup</th><td><textarea></textarea></td></tr>";
}

J'ai testé ça, ça marche. Voir les écrans:

taxo_add_form_fields,taxo_edit_form_fields.

Remplacez <taxonomy name> par "catégorie" si vous le souhaitez dans les catégories de publication standard. Pour enregistrer les valeurs où vous voulez, vous aurez besoin de:

add_action( 'created_term',  'store_my_field' , '', 3 );
add_action( 'edit_term',  'store_my_field' , '', 3 );
1
Rutwick Gangurde