2

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
  • I'd recommend you to wait for the 4.4 release, as its not yet released. But if you have hurry and can apply the new method after being updated, @bainternet has a TaxMeta Class, ready to use, and it's easy. There are free plugins available for Taxonomy Meta. I've an article explaining everything, but pardon me, my article is in Bengali. But waiting for 4.4 would be the wisest decision. :) Commented Nov 29, 2015 at 7:03

1 Answer 1

1

You can implement this in two ways to add meta boxes through plugin or wordpress predefined hooks

https://wordpress.org/plugins/taxonomy-metadata/

  **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 );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.