在 WordPress 中保存用户类别

问题描述 投票:0回答:1

我一直在关注以下教程如何在 WordPress 中添加用户分类法 ,我的问题是用户类别不保存。我希望能够为用户添加类别以实现过滤功能。

这是我的保存功能:

add_action( 'personal_options_update', 'ru_admin_save_user_categories' );
add_action( 'edit_user_profile_update', 'ru_admin_save_user_categories' );


function ru_admin_save_user_categories( $user_id ) {
    $tax = get_taxonomy( USER_CATEGORY_NAME );
    $user = get_userdata( $user_id );

if ( !user_can( $user, 'administrator' ) ) {
    return false;
}

$new_categories_ids = $_POST[USER_CATEGORY_META_KEY];
$user_meta = get_user_meta( $user_id, USER_CATEGORY_META_KEY, true );
$previous_categories_ids = array();

if( !empty( $user_meta ) ) {
    $previous_categories_ids = (array)$user_meta;
}

if( ( current_user_can( 'administrator' ) && $_POST['role'] != 'author' ) ) {
    delete_user_meta( $user_id, USER_CATEGORY_META_KEY );
    ru_update_users_categories_count( $previous_categories_ids, array() );
} else {
    update_user_meta( $user_id, USER_CATEGORY_META_KEY, $new_categories_ids );
    ru_update_users_categories_count( $previous_categories_ids, $new_categories_ids );
}
}

提交后没有任何反应,我也没有看到用户元中保存的数据。

php wordpress categories taxonomy
1个回答
0
投票

我也处于同样的情况,经过大量挖掘和搜索,我发现我在项目中使用的这个插件名为 LH 用户分类法,他们在用户中保存术语的方式是使用以下函数。

function set_terms_for_user( $user_id, $taxonomy, $terms = array(), $bulk = false ) {

    // Get the taxonomy
    $tax = get_taxonomy( $taxonomy );

    // Make sure the current user can edit the user and assign terms before proceeding.
    if ( ! current_user_can( 'edit_user', $user_id ) && current_user_can( $tax->cap->assign_terms ) ) {
        return false;
    }

    if ( empty( $terms ) && empty( $bulk ) ) {
        $terms = isset( $_POST[ $taxonomy ] )
            ? $_POST[ $taxonomy ]
            : null;
    }

    // Delete all user terms
    if ( is_null( $terms ) || empty( $terms ) ) {
        wp_delete_object_term_relationships( $user_id, $taxonomy );

    // Set the terms
    } else {
        $_terms = array_map( 'sanitize_key', $terms );

        // Sets the terms for the user
        wp_set_object_terms( $user_id, $_terms, $taxonomy, false );
    }

    // Clean the cache
    clean_object_term_cache( $user_id, $taxonomy );
}

通常,他们与用户保存条款的主要部分是使用名为

的 WordPress 功能
wp_set_object_terms( $user_id, $_terms, $taxonomy, false );

如果您有其他问题,您应该查看该插件,或者只是在您的项目中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.