如何使用WordPress的taxonomy和term_meta来创建自定义分类和元数据?

2024-10-31 130 0

在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管理后台中添加和编辑自定义分类,并为它们设置自定义字段了

相关文章

在WordPress主题中,如何实现响应式布局?
如何使用WordPress的nonce字段来增强表单安全性?
如何使用WordPress REST API 创建和读取自定义端点?
在WordPress主题开发中,如何使用wp_nav_menu()函数来自定义菜单?
如何使用the_post()函数在WordPress主题中循环显示文章?
在WordPress插件开发中,如何创建自定义数据库表?