3

I'm trying to add a custom field for categories. The custom field is a single checkbox. I can get the checkbox to show up on the forms in the create new category and edit category pages but if I check the checkbox it isn't staying checked after saving the form.

This is the code I'm using:

/*  Custom Field for Categories.
    ======================================== */

//Add new page

function my_taxonomy_add_meta_fields( $taxonomy ) {
    ?>
    <div class="form-field term-group">
        <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        <input type="checkbox" id="show_category" name="show_category" />
    </div>
    <?php
}
add_action( 'category_add_form_fields', 'my_taxonomy_add_meta_fields', 10, 2 );

//Edit term page

function my_taxonomy_edit_meta_fields( $term, $taxonomy ) {
    $show_category = get_term_meta( $term->term_id, 'show_category', true );
    ?>
    <tr class="form-field term-group-wrap">
        <th scope="row">
            <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        </th>
        <td>
            <input type="checkbox" id="show_category" name="show_category" value="<?php echo $show_category; ?>" />
        </td>
    </tr>
    <?php
}
add_action( 'category_edit_form_fields', 'my_taxonomy_edit_meta_fields', 10, 2 );

//Save custom meta

function my_taxonomy_save_taxonomy_meta( $term_id, $tag_id ) {
    if( isset( $_POST['show_category'] ) ) {
        update_term_meta( $term_id, 'show_category', esc_attr( $_POST['show_category'] ) );
    }
}
add_action( 'created_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
add_action( 'edited_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );

I copied this code from a tutorial I found. The original code was for a text field type custom field so I think the problem probably has to do with the checkbox settings.

2

Checkboxes are a bit different than text inputs. The main changes below are in the save function and with handling the checked attribute. The value of show_category will be yes if it's been checked or an empty string for unchecked.

Keep in mind that if the show_category meta was never saved it will be unset, so take that into account in your code.

/*  Custom Field for Categories.
    ======================================== */

// Add new term page
function my_taxonomy_add_meta_fields( $taxonomy ) { ?>
    <div class="form-field term-group">
        <label for="show_category">
          <?php _e( 'Show Category', 'codilight-lite' ); ?> <input type="checkbox" id="show_category" name="show_category" value="yes" />
        </label>
    </div><?php
}
add_action( 'category_add_form_fields', 'my_taxonomy_add_meta_fields', 10, 2 );

// Edit term page
function my_taxonomy_edit_meta_fields( $term, $taxonomy ) {
    $show_category = get_term_meta( $term->term_id, 'show_category', true ); ?>

    <tr class="form-field term-group-wrap">
        <th scope="row">
            <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        </th>
        <td>
            <input type="checkbox" id="show_category" name="show_category" value="yes" <?php echo ( $show_category ) ? checked( $show_category, 'yes' ) : ''; ?>/>
        </td>
    </tr><?php
}
add_action( 'category_edit_form_fields', 'my_taxonomy_edit_meta_fields', 10, 2 );

// Save custom meta
function my_taxonomy_save_taxonomy_meta( $term_id, $tag_id ) {
    if ( isset( $_POST[ 'show_category' ] ) ) {
        update_term_meta( $term_id, 'show_category', 'yes' );
    } else {
        update_term_meta( $term_id, 'show_category', '' );
    }
}
add_action( 'created_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
add_action( 'edited_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
  • 1
    Thanks, it's working perfectly now. I really appreciate your help. – jrcollins Sep 9 '16 at 5:31
  • Would you mind to add the codes to get the data as well for the taxonomy custom fields as well? – Musa Jun 9 at 2:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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