カスタム分類法にカスタム フィールドを追加するには、次のコードをテーマのfunctions.phpに追加します。
// A callback function to add a custom field to our "presenters" taxonomy
function presenters_taxonomy_custom_fields($tag) {
// Check for existing taxonomy meta for the term you're editing
$t_id = $tag->term_id; // Get the ID of the term you're editing
$term_meta = get_option( "taxonomy_term_$t_id" ); // Do the check
?>
<tr class="form-field">
<th scope="row" valign="top">
<label for="presenter_id"><?php _e('WordPress User ID'); ?></label>
</th>
<td>
<input type="text" name="term_meta[presenter_id]" id="term_meta[presenter_id]" size="25" style="width:60%;" value="<?php echo $term_meta['presenter_id'] ? $term_meta['presenter_id'] : ''; ?>"><br />
<span class="description"><?php _e('The Presenter\'s WordPress User ID'); ?></span>
</td>
</tr>
<?php
}
次に、カスタム フィールドを保存するために使用するコールバック関数を作成します。次のコードをテーマのfunctions.phpに追加します。
// 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 );
}
}
上記のコードは、1 つ以上のカスタム分類法に対して「そのまま」機能し、変更は必要ありません。
これらのコールバック関数をカスタム分類の「編集」画面に関連付けましょう。そのために、作成するカスタム分類法ごとに利用できる WordPress アクション フックを 2 つ使用します。次のコードをテーマのfunctions.phpに追加します。
// Add the fields to the "presenters" taxonomy, using our callback function
add_action( 'presenters_edit_form_fields', 'presenters_taxonomy_custom_fields', 10, 2 );
// Save the changes made on the "presenters" taxonomy, using our callback function
add_action( 'edited_presenters', 'save_taxonomy_custom_fields', 10, 2 );
カスタム分類法に追加されたカスタム フィールドにアクセスするには、カスタム分類法テンプレート (taxonomy-presenters.php など) の上部にある PHP ブロック内に次のコードを追加します。
// Get the custom fields based on the $presenter term ID
$presenter_custom_fields = get_option( "taxonomy_term_$presenter->term_id" );
// Return the value for the "presenter_id" custom field
$presenter_data = get_userdata( $presenter_custom_fields[presenter_id] ); // Get their data
この例が機能するためには、作業している用語のカスタム フィールドに値が保存されていることを確認してください。
<?php
echo '<pre>';
print_r( $presenter_custom_fields );
echo '</pre>';
?>