在WordPress中,taxonomy用于对内容进行分类和组织,而term_meta则允许你为分类项(terms)添加额外的元数据。以下是如何使用taxonomy和term_meta来创建自定义分类和元数据的步骤:
步骤 1: 注册自定义分类法(Taxonomy)
首先,你需要注册一个自定义分类法。这通常在主题的 functions.php
文件中完成。
function create_custom_taxonomy() {
// 设置标签参数
$labels = array(
'name' => _x( '自定义分类', 'taxonomy general name' ),
'singular_name' => _x( '自定义分类', 'taxonomy singular name' ),
'search_items' => __( '搜索自定义分类' ),
'all_items' => __( '所有自定义分类' ),
'parent_item' => __( '父级自定义分类' ),
'parent_item_colon' => __( '父级自定义分类:' ),
'edit_item' => __( '编辑自定义分类' ),
'update_item' => __( '更新自定义分类' ),
'add_new_item' => __( '添加新自定义分类' ),
'new_item_name' => __( '新自定义分类名' ),
'menu_name' => __( '自定义分类' ),
);
// 设置参数
$args = array(
'labels' => $labels,
'hierarchical' => true, // 是否层级化,类似分类目录
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'custom-taxonomy' ),
);
// 注册分类法
register_taxonomy( 'custom_taxonomy', array( 'post' ), $args );
}
add_action( 'init', 'create_custom_taxonomy', 0 );
步骤 2: 添加term_meta支持
接下来,你需要为你的分类法添加term_meta支持。WordPress 4.4及以上版本内置了term_meta
支持,你可以直接使用。
function custom_taxonomy_add_new_meta_field() {
// 这个钩子是在添加新分类表单时调用的
?>
<div class="form-field">
<label for="term_meta[custom_field]"><?php _e( '自定义字段', 'textdomain' ); ?></label>
<input type="text" name="term_meta[custom_field]" id="term_meta[custom_field]" value="">
<p class="description"><?php _e( '描述你的自定义字段。'); ?></p>
</div>
<?php
}
add_action( 'custom_taxonomy_add_form_fields', 'custom_taxonomy_add_new_meta_field', 10, 2 );
function custom_taxonomy_edit_meta_field($term) {
// 获取当前分类的term_meta
$t_id = $term->term_id;
$term_meta = get_term_meta( $t_id, 'custom_field', true );
?>
<tr class="form-field">
<th scope="row"><label for="term_meta[custom_field]"><?php _e( '自定义字段', 'textdomain' ); ?></label></th>
<td>
<input type="text" name="term_meta[custom_field]" id="term_meta[custom_field]" value="<?php echo esc_attr( $term_meta ) ? esc_attr( $term_meta ) : ''; ?>">
<p class="description"><?php _e( '描述你的自定义字段。'); ?></p>
</td>
</tr>
<?php
}
add_action( 'custom_taxonomy_edit_form_fields', 'custom_taxonomy_edit_meta_field', 10, 2 );
function save_custom_taxonomy_custom_meta( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_term_meta( $t_id, 'custom_field', true );
$cat_keys = array_keys( $_POST['term_meta'] );
foreach ( $cat_keys as $key ) {
if ( isset ( $_POST['term_meta'][$key] ) ) {
update_term_meta( $t_id, $key, $_POST['term_meta'][$key] );
}
}
}
}
add_action( 'edited_custom_taxonomy', 'save_custom_taxonomy_custom_meta', 10, 2 );
add_action( 'create_custom_taxonomy', 'save_custom_taxonomy_custom_meta', 10, 2 );
在上述代码中,custom_taxonomy
是你的自定义分类法的名称,custom_field
是你为分类项添加的元数据字段。你需要将textdomain
替换为你的主题或插件的实际文本域。
完成这些步骤后,你就可以在WordPress管理后台中添加和编辑自定义分类,并为它们设置自定义字段了