Cum pot adăuga o coloană personalizată în tabelul "Gestionare categorii"?
Am făcut asta pentru articole, dar nu găsesc metoda corectă de a referenția coloanele tabelului de categorii.
Încerc să adaug o coloană intitulată "Imagine" în tabel, astfel încât atunci când grila tabelului de categorii este afișată, dacă există o imagine de categorie asignată, aceasta să apară în grilă.
Primul pas pentru mine este să determin filtrul corect pe care să-l abordez pentru a insera coloana în tabel.
Am încercat fiecare dintre acestea fără succes...
add_filter('manage_categories_columns', 'myFunction', 10, 2);
add_filter('manage_category_columns', 'myFunction', 10, 2);
function myFunction($cat_columns)
{
$cat_columns['cat_image_thumb'] = 'Imagine';
return $cat_columns;
}

Adăugarea numelui coloanei
function manage_my_category_columns($columns)
{
// adaugă 'Coloana Mea'
$columns['my_column'] = 'Coloana Mea';
return $columns;
}
add_filter('manage_edit-category_columns','manage_my_category_columns');
Apoi dorim să introducem datele în ea:
function manage_category_custom_fields($deprecated,$column_name,$term_id)
{
if ($column_name == 'my_column') {
echo 'test';
}
}
add_filter ('manage_category_custom_column', 'manage_category_custom_fields', 10,3);
Sper că acest lucru a fost util.

Filtrul este manage_{$screen->id}_columns
, iar $screen->id
este edit-category
, oferindu-ți manage_edit-category_columns
.
Am descoperit acest lucru plasând un var_dump()
în get_column_headers()
, care este apelat de print_column_headers()
, la rândul său apelat în wp-admin/edit-tags.php
, pagina unde editezi elementele de categorie.

@Jan: Mulțumesc! Asta a funcționat pentru antetul coloanei. Acum încerc să folosesc urmărirea ta pentru a afla cum să adaug inserarea rândului. Când mă uit în edit-tags.php văd apelul "tag_rows", care cred că este ceea ce creează rândurile, dar nu pot găsi acea funcție pentru a face var_dump și a obține numele filtrului. Ai vreo idee?

@Scott: Dacă vorbești despre o taxonomie ierarhică precum categoriile, tag_rows()
apelează _term_rows()
, care la rândul ei apelează _tag_row()
. Această funcție apelează acțiunea manage_{$taxonomy}_custom_column
, care în cazul tău ar fi manage_category_custom_column
.

@Jan mulțumesc. Am reușit să setez acțiunea, dar nu reușesc să fac echo să funcționeze.. acțiune > add_action('manage_category_custom_column', 'myFunction', 10, 2);

@Scott: Într-adevăr, am greșit, este un filtru, nu o acțiune, așa că ar trebui să returnați conținutul pe care doriți să îl afișați, nu să îl ecouați - spre deosebire de coloanele personalizate ale postărilor, unde trebuie să le ecouați.

OK, asta e mai bine. Funcționează perfect cu filtru și return vs acțiune și echo. Mulțumesc Jan!

@Jan, Se pare că ID-ul categoriei nu este transmis funcției. Am două argumente în apelul funcției, primul este gol și al doilea conține ID-ul rândului personalizat. Ar trebui să duc asta la o întrebare dedicată, deoarece am răspuns deja la cea originală?

@Scott: Probabil cel mai bine este să o întrebi ca o nouă întrebare.

Tocmai l-am găsit. Este al treilea argument. A trebuit să schimb filtrul la 10,3 și funcția devine myColumnRows($empty_arg, $column_name, $category_id)

@Scott: Aici este normal: dacă niciun plugin nu oferă nimic de afișat în coloană, ar trebui să fie gol. Ține minte, acesta este un filtru: primul argument este valoarea pe care callback-ul tău o va modifica. echo '<td>'; do_action( 'custom_column' ); echo '</td>';
convertit într-un filtru devine echo '<td>'; echo apply_filters( 'custom_column', '' ); echo '</td>';
.

În plus față de exemplul lui @LeoDang, custom_column este aplicat la taxonomia personalizată pe baza următoarelor filtre.
Testat și validat în Wordpress 3.8
1.Adăugarea antetului coloanei personalizate
// aceste filtre vor afecta doar coloana personalizată, coloana implicită nu va fi afectată
// filtru: manage_edit-{$taxonomy}_columns
function custom_column_header( $columns ){
$columns['header_name'] = 'Nume Antet pentru Afișare';
return $columns;
}
add_filter( "manage_edit-shop-subcategory_columns", 'custom_column_header', 10);
2.Adăugarea datelor coloanei personalizate la antetul corespunzător
// ordinea parametrilor: valoare_de_afișat, $column_name, $tag->term_id
// filtru: manage_{$taxonomy}_custom_column
function custom_column_content( $value, $column_name, $tax_id ){
// var_dump( $column_name );
// var_dump( $value );
// var_dump( $tax_id );
// pentru mai multe coloane personalizate, puteți lua în considerare utilizarea numelui coloanei pentru a le distinge
// deși clauza If funcționează, Switch este o abordare mai generică și mai bine structurată pentru mai multe coloane
// if ($column_name === 'header_name') {
// echo '1234';
// }
switch( $column_name ) {
case 'header_name1':
// codul tău aici
$value = 'nume antet 1';
break;
case 'header_name2':
// codul tău aici
$value = 'nume antet 2';
break;
// ... similar pentru mai multe coloane
default:
break;
}
return $value; // aceasta este valoarea afișată
}
add_action( "manage_shop-subcategory_custom_column", 'custom_column_content', 10, 3);
De asemenea, puteți consulta codul gist partajat online pentru orice actualizare și note suplimentare.
