I have a custom taxonomy for cities, and would like to have this available as a custom field to be able to access it using the iOS Workflow app. Considering the changes in 4.4 what should I do if I want to have a custom field for location to be able to use in the Workflow app?
I found this page titled, “Adding Custom Meta Fields to Taxonomies”:
https://pippinsplugins.com/adding-custom-meta-fields-to-taxonomies/
which notes:
With WordPress 4.4, there will be a native “terms metadata” table in WordPress, so this is no longer a necessary or valid method of adding customer metadata to terms.
See here for more information: https://make.wordpress.org/core/2015/09/04/taxonomy-term-metadata-proposal/
My custom taxonomy is:
add_action( 'init', 'loc_taxonomy', 0 );
function loc_taxonomy() {
$labels = array(
'name' => _x( 'Locations', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Location', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Locations', 'text_domain' ),
'all_items' => __( 'All Locations', 'text_domain' ),
'parent_item' => __( 'Parent Location', 'text_domain' ),
'parent_item_colon' => __( 'Parent Location:', 'text_domain' ),
'new_item_name' => __( 'New Location Name', 'text_domain' ),
'add_new_item' => __( 'Add New Location', 'text_domain' ),
'edit_item' => __( 'Edit Location', 'text_domain' ),
'update_item' => __( 'Update Location', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate locations with commas', 'text_domain' ),
'search_items' => __( 'Search locations', 'text_domain' ),
'add_or_remove_items' => __( 'Add or remove locations', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from the most used locations', 'text_domain' ),
'not_found' => __( 'Not Found', 'text_domain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'loc', array( 'post' ), $args );
}
1 Answer
You can implement this in two ways to add meta boxes through plugin or wordpress predefined hooks
**OR**
Add the following code in functions.php in your theme
function mj_taxonomy_add_custom_meta_field() {
?>
<div class="form-field">
<label for="term_meta[class_term_meta]"><?php _e( 'Add Class', 'MJ' ); ?></label>
<input type="text" name="term_meta[class_term_meta]" id="term_meta[class_term_meta]" value="">
<p class="description"><?php _e( 'Enter a value for this field','MJ' ); ?></p>
</div>
<?php
}
add_action( 'product_cat_add_form_fields', 'mj_taxonomy_add_custom_meta_field', 10, 2 );
function mj_taxonomy_edit_custom_meta_field($term) {
$t_id = $term->term_id;
$term_meta = get_option( "taxonomy_$t_id" );
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="term_meta[class_term_meta]"><?php _e( 'Add Class', 'MJ' ); ?></label></th>
<td>
<input type="text" name="term_meta[class_term_meta]" id="term_meta[class_term_meta]" value="<?php echo esc_attr( $term_meta['class_term_meta'] ) ? esc_attr( $term_meta['class_term_meta'] ) : ''; ?>">
<p class="description"><?php _e( 'Enter a value for this field','MJ' ); ?></p>
</td>
</tr>
<?php
}
add_action( 'product_cat_edit_form_fields','mj_taxonomy_edit_custom_meta_field', 10, 2 );
function mj_save_taxonomy_custom_meta_field( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_$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_$t_id", $term_meta );
}
}
add_action( 'edited_product_cat', 'mj_save_taxonomy_custom_meta_field', 10, 2 );
add_action( 'create_product_cat', 'mj_save_taxonomy_custom_meta_field', 10, 2 );