Jeg har for nylig haft et behov for at gemme nogle ekstra meta-oplysninger om hver kategori / brugerdefineret taksonomi i WordPress. Grundlæggende behøvede jeg bare at tilføje et ekstra felt. Det var bare et simpelt spørgsmål om at finde de rigtige kroge og lave en simpel kategori meta plugin. Vi laver ikke en masse nye kategorier, vi har hovedsagelig kun brug for at gemme nogle yderligere oplysninger om de eksisterende, så jeg har bare hooked i redigeringsformularen.
Jeg ønskede også, at dette skulle fungere uden at bruge nogen brugerdefinerede tabeller, men der er virkelig ikke noget godt sted at gemme oplysninger af denne type inden for standard WordPress-tabeller. Jeg besluttede, at wp_options-tabellen ville være bedst egnet, da det kommer ned til det, ville de fleste steder ikke have mere end et par hundrede kategorier. Der er ikke nok oplysninger, der lagres i vores ende, for at dette kan skabe et problem.
ADD_ACTION ( 'category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_category', 'taxonomy_meta_form');
Den første handling kroker i kategori / taxonomy edit form. Det viser formularen, vi har oprettet og output fra funktionen called taxonomy_meta_form_fields . Den anden handling kalder taxonomy_meta_form, når kategoriformen faktisk redigeres.
Fuld kode
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')) // Sørg for at brugeren har passende tilladelser tilbage; hvis ($ _ POST ['extra_title']) {$ extra_title = sanitize_text_field ($ _ POST ['extra_title']); // sørg for ikke noget ondsindet $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ cat_ID = (int) $ _ POST ['tag_ID']; $ extra_titles [$ cat_ID] = $ extra_title; // opdater værdien for denne kategoris ID update_option ('extra_taxonomy_titles', $ extra_titles); // lagre arrayet, WP håndterer 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]; ?>
Hooking i brugerdefinerede taxonomier
ADD_ACTION ( 'TAXONOMYNAME_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_TAXONOMYNAME', 'taxonomy_meta_form');
At gøre denne samme handling, men for brugerdefinerede taksonomier i stedet, det er et simpelt spørgsmål om at ændre handlingen krogen. Bare erstat TAXONOMYNAME ovenfor med slugken, der er knyttet til din brugerdefinerede taksonomi.
Viser oplysningerne
For at hente de oplysninger, der er lagret for os på fronten, vil jeg anbefale at oprette en simpel funktion til at gemme i dit tema's 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]; returnere $ extra_title; }
Derefter kunne det kaldes fra en skabelon side som følger:
$ extra_title = tj_extra_title ($ kategori-> term_id); // erstat id med hvilken variabel der passer til din kontekst echo $ extra_title;
Se kode på github. Stil spørgsmål nedenfor.