Jeg har nylig hatt behov for å lagre litt ekstra metainformasjon på hver kategori / tilpasset taksonomi i WordPress. I utgangspunktet trengte jeg bare å legge til et ekstra felt. Det var bare et enkelt spørsmål om å finne de riktige krokene og lage en enkel kategori meta-plugin. Vi legger ikke mye til i å legge til nye kategorier, vi har hovedsakelig bare behov for å lagre ytterligere informasjon om de eksisterende, så jeg bare hekta inn i redigeringsskjemaet.
Jeg ville også at dette skulle fungere uten å bruke noen egendefinerte tabeller, men det er egentlig ikke noe bra sted å lagre informasjon av denne typen i standard WordPress-tabeller. Jeg bestemte meg for at wp_options-tabellen ville være best egnet siden det kommer ned til det, ville de fleste nettsteder ikke ha mer enn et par hundre kategorier. Det er ikke nok informasjon lagret på slutten av dette for å skape et problem.
ADD_ACTION ( 'category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_category', 'taxonomy_meta_form');
Den første handlingen kroker i kategori / taksonomi rediger skjema. Den viser skjemaet vi har opprettet og utdata fra funksjonen kalt taxonomy_meta_form_fields . Den andre handlingen kaller taxonomy_meta_form når kategoriformen faktisk er redigert.
Full kode
ADD_ACTION ( 'category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_category', 'taxonomy_meta_form'); funksjon taxonomy_meta_form () {if (! current_user_can ('manage_options')) // sørg for at brukeren har riktige tillatelser tilbake; hvis ($ _ POST ['extra_title']) {$ extra_title = sanitize_text_field ($ _ POST ['extra_title']); // sørg for ikke noe ondsinnet $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ cat_ID = (int) $ _ POST ['tag_ID']; $ extra_titles [$ cat_ID] = $ extra_title; // oppdater verdien for denne kategoriens ID update_option ('extra_taxonomy_titles', $ extra_titles); // lagre matrisen, WP håndterer serialiseringen}} funksjonen taxonomy_meta_form_fields ($ tag) {$ cat_ID = $ tag-> term_id; $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_title = $ extra_titles [$ cat_ID]; ?>
Hooking i egendefinerte taxonomier
ADD_ACTION ( 'TAXONOMYNAME_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_TAXONOMYNAME', 'taxonomy_meta_form');
For å gjøre denne samme handlingen, men for egendefinerte taksonomier i stedet, er det et enkelt spørsmål om å endre handlingen krok. Bare erstatt TAXONOMYNAME ovenfor med slug som er knyttet til din egendefinerte taksonomi.
Viser informasjonen
For å hente informasjonen som er lagret for oss på frontend, anbefaler jeg å lage en enkel funksjon for butikken i temaets funksjoner.php-fil:
funksjon tj_extra_title ($ id) {$ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ extra_title = $ extra_titles [$ id]; returnere $ extra_title; }
Deretter kan det kalles fra en malside som følger:
$ extra_title = tj_extra_title ($ kategori-> term_id); // erstatt id med hvilken variabel som passer for kontekst echo $ extra_title;
Se kode på github. Still spørsmål nedenfor.