カテゴリ用のカスタムフィールドを追加しようとしています。カスタムフィールドは単一のチェックボックスです。新しいカテゴリの作成およびカテゴリの編集ページのフォームにチェックボックスが表示されるようにすることはできますが、チェックボックスをオンにしてもフォームを保存した後もチェックされないままです。
これは私が使っているコードです:
/* 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 );
私が見つけたチュートリアルからこのコードをコピーしました。元のコードはテキストフィールドタイプのカスタムフィールド用でしたので、問題はおそらくチェックボックスの設定に関係していると思います。
チェックボックスはテキスト入力とは少し異なります。以下の主な変更はsave関数とchecked
属性の処理にあります。 show_category
の値は、 yes チェックされている場合、またはチェックされていない場合は空の文字列になります。
show_category
メタが保存されていない場合は設定解除されるので、コードでそれを考慮に入れてください。
/* 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 );