Lägg till fält i kategori / taxonomi WordPress

Jag hade nyligen ett behov av att lagra lite extra metainformation om varje kategori / anpassad taxonomi i WordPress. I grund och botten behövde jag bara lägga till ett extra fält. Det var bara en enkel fråga om att hitta rätt krokar och göra en enkel kategori meta plugin. Vi lägger inte mycket på att lägga till nya kategorier, vi behövde huvudsakligen bara lagra lite ytterligare information om befintliga, så jag höll bara in i redigeringsformuläret.

Jag ville också att detta skulle fungera utan att använda några anpassade tabeller, men det finns verkligen ingen bra plats att lagra information av denna typ inom standard WordPress-tabellerna. Jag bestämde mig för att wp_options-tabellen skulle passa bäst eftersom det inte kommer att ha mer än ett par hundra kategorier när det kommer till det. Det finns inte tillräckligt med information lagras i slutet för att detta ska skapa ett problem.

 add_action ( 'category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_category', 'taxonomy_meta_form'); 

Den första åtgärden krokar i kategorin / taxonomy edit form. Den visar den form som vi har skapat och matar ut från funktionen taxonomy_meta_form_fields . Den andra åtgärden kallar taxonomy_meta_form när kategoridokumentet faktiskt redigeras.

Fullständig kod

 add_action ( 'category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_category', 'taxonomy_meta_form'); funktion taxonomy_meta_form () {if (! current_user_can ('manage_options')) // kontrollera att användaren har rätt behörighet tillbaka; om ($ _ POST ['extra_title']) {$ extra_title = sanitize_text_field ($ _ POST ['extra_title']); // Se till att inget skadligt $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ cat_ID = (int) $ _ POST ['tag_ID']; $ extra_titles [$ cat_ID] = $ extra_title; // uppdatera värdet för den här kategorin ID update_option ('extra_taxonomy_titles', $ extra_titles); // lagra matrisen, WP hanterar serialiseringen}} funktion taxonomy_meta_form_fields ($ tag) {$ cat_ID = $ tag-> term_id; $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_title = $ extra_titles [$ cat_ID]; ?> 

Haka i anpassade taxonomier

 add_action ( 'TAXONOMYNAME_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_TAXONOMYNAME', 'taxonomy_meta_form'); 

Att göra samma sak, men för egna taxonomier istället, det är en enkel fråga om att ändra åtgärdskroken. Byt bara TAXONOMYNAME ovan med den slug som är associerad med din anpassade taxonomi.

Visar informationen

För att hämta den information som lagrats för oss på fronten rekommenderar jag att du skapar en enkel funktion för att lagra i ditt temas funktioner.php-fil:

 funktion tj_extra_title ($ id) {$ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ extra_title = $ extra_titles [$ id]; returnera $ extra_title; } 

Då kan det hämtas från en mallsida enligt följande:

 $ extra_title = tj_extra_title ($ category-> term_id); // ersätt id med vilken variabel som är lämplig för ditt sammanhang echo $ extra_title; 

Visa kod på github. Ställ frågor nedan.

Se Även