Saving extra fields that were added to a taxonomy. I want the most proper & efficient way of doing so. Where should I save the new fields?
2 possible solutions are to
1) Use the WordPress options table as described here… Add Custom Fields to Custom Taxonomies. This is admittedly “not clean” and assumed not to be the correct answer.
// A callback function to save our extra taxonomy field(s)
function save_taxonomy_custom_fields( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_term_$t_id" );
$cat_keys = array_keys( $_POST['term_meta'] );
foreach ( $cat_keys as $key ){
if ( isset( $_POST['term_meta'][$key] ) ){
$term_meta[$key] = $_POST['term_meta'][$key];
}
}
//save the option array
update_option( "taxonomy_term_$t_id", $term_meta );
}
}
2) Add a new table as described here Custom Taxonomies in WordPress which follows the naming convention of ‘wp_’ + customtaxonomykey + ‘meta’.
3) Some other option
Option 2 is the cleanest method – which I’ve also used a number of times. Unfortunately, there is no default term_metadata table in WordPress yet. This post also covers the same approach, http://shibashake.com/wordpress-theme/add-term-or-taxonomy-meta-data
And of course, there’s a plugin for that too 🙂 http://wordpress.org/extend/plugins/taxonomy-metadata/
You can save attachment id in options table and get to display that attachment
There are three main functions to add the meta box for taxonomy.Which are invoked through following hooks:
Here you can change the taxonomy_name with any predefined or custom taxonomy accordingly. I am using âWoocommerce product taxonomyâ and created a plugin for same. Please review following functions to add custom field:
{taxonomy_name}_add_form_fields add new custom field to add new term page form.Here I am creating a field to add a Class for term.
Add the following code in functions.php in your theme
{taxonomy_name}_edit_form_fields add a field on term edit page
1) Default
wp_options
tableI really don’t understand why folks propose
when we can have one single option, whose indexes are the Term ID and the custom fields as values
and then simply pull the option and get the value stored for a given Term ID
2) Custom
wp_taxonomymeta
tableThat’s what the plugin Taxonomy Metadata, linked by James, does. And it’s quite simple, once this table is created, the functions
add_
,get_
,update_
anddelete_metadata
will start working with'taxonomy'
. Like so:3) Helper Post Type
As described in Matthew Boynes answer (I think someone mentions this too in the ticket #10142.
4) Outside the Box
In the plugin code, there’s a link to the Core Ticket #10142 discussing all this. It’s a 4 years old ticket,
(closed)(maybelater)
, lots of developers jumped in, but no conclusion was reached.By the end of it, we have this nugget (my emphasis):
Pretty clever.
The best answer is (3) Some other option.
This is a little unconventional, but it scales the best, leverages core the most, and doesn’t require adding a database table: Add a hidden post type for the taxonomy. Each term in the taxonomy gets its own post in the post type. With that in place, the term meta can be stored as post meta. Here’s an example of using this approach.
The main issues with any other approach (including the “use the term’s description field to hold serialized data” option) are scalability, performance, and compatibility.
https://wordpress.org/plugins/taxonomy-metadata/
You can customized through above mentioned plugin..