PHP函数在WP前端vs数据库中生成不一致的结果

PHP函数在WP前端vs数据库中生成不一致的结果,php,wordpress,Php,Wordpress,我有一个生成章节id的函数: add_action('user_register', 'fetch_chapter'); function fetch_chapter_id(){ $current_user = wp_get_current_user(); $current_user_id = $current_user->ID; global $wpdb; $result = $wpdb->get_var('SELECT meta_value FRO

我有一个生成章节id的函数:

add_action('user_register', 'fetch_chapter');
function fetch_chapter_id(){
    $current_user = wp_get_current_user();
    $current_user_id = $current_user->ID;
    global $wpdb;
    $result = $wpdb->get_var('SELECT meta_value FROM usermeta WHERE meta_key = \'chapter_name\' AND user_id = '. $current_user->ID .' LIMIT 1');
    if ($result == 'Peregrine') {
        $chapter_id = 'PG';
    }elseif ($result == 'Barbary') {
        $chapter_id = 'BB';
    }elseif ($result == 'Prairie') {
        $chapter_id = 'PR';
    }

        return $chapter_id;
}
add_shortcode('chapter_id', 'fetch_chapter_id'); 
add_action('user_register', 'generate_member_id');
function generate_member_id($user_id){

    // If no user_id is passed in, use the current user id
    if (!$user_id) $user_id = get_current_user_id();

    $unique_id = 1000 + $user_id;
    $chapter_id = fetch_chapter_id();
    $member_id = "FAL-" . $chapter_id . "-" . $unique_id;
    
    return $member_id;
}
add_shortcode('member_id', 'generate_member_id'); 
然后使用章节id生成
成员id

add_action('user_register', 'fetch_chapter');
function fetch_chapter_id(){
    $current_user = wp_get_current_user();
    $current_user_id = $current_user->ID;
    global $wpdb;
    $result = $wpdb->get_var('SELECT meta_value FROM usermeta WHERE meta_key = \'chapter_name\' AND user_id = '. $current_user->ID .' LIMIT 1');
    if ($result == 'Peregrine') {
        $chapter_id = 'PG';
    }elseif ($result == 'Barbary') {
        $chapter_id = 'BB';
    }elseif ($result == 'Prairie') {
        $chapter_id = 'PR';
    }

        return $chapter_id;
}
add_shortcode('chapter_id', 'fetch_chapter_id'); 
add_action('user_register', 'generate_member_id');
function generate_member_id($user_id){

    // If no user_id is passed in, use the current user id
    if (!$user_id) $user_id = get_current_user_id();

    $unique_id = 1000 + $user_id;
    $chapter_id = fetch_chapter_id();
    $member_id = "FAL-" . $chapter_id . "-" . $unique_id;
    
    return $member_id;
}
add_shortcode('member_id', 'generate_member_id'); 
最后,这会将成员id添加到WP数据库:

global $wpdb;
$users = $wpdb->get_results( "SELECT ID FROM $wpdb->users" );
if( $users ) {
    foreach ( $users as $user ) {
        update_user_meta( $user->ID, 'member_id', generate_member_id($user->ID) );
    }
}
第一个和第二个代码片段的输出是准确的,我可以在前端使用
[chapter\u id]
[member\u id]
快捷码检查

但是第三个代码段的结果是不正确的,并且总是包含管理员章节id(我以管理员身份登录)

因此,前端显示的值与数据库中保存的值之间存在差异。如果我创建了一个新用户,前端中的成员id是正确的,但数据库中保存的成员id不正确地包含管理员的章节id


有人能给我指出正确的方向吗?

我认为短代码之所以有效,是因为查看页面的人既是“成员”用户又是当前用户。 但是,当您更新数据库时,您是当前用户而不是“成员”用户-但是代码仍在使用当前用户值(即您的数据)更新成员用户数据

您可以更改
user\u register
函数以接受用户id作为参数。然后:

  • 如果传入了一个用户id(例如,在从
    添加\u操作
    进行用户注册期间),这将是成员用户id,因此您可以为该用户选择章节
  • 如果未传入任何用户id(例如,在使用快捷码时),则将使用当前用户id
这就是
fetch\u chapter\u id
函数现在的样子-我刚刚添加了用户id作为参数(代码中的注释#1),并更改了设置此值的代码(注释#2):

现在,您只需将用户id传递到
生成成员id
函数中的函数中,请参见coe中的注释\3

function generate_member_id($user_id){  
    // If no user_id is passed in, use the current user id
    if (!$user_id) $user_id = get_current_user_id();    
    $unique_id = 1000 + $user_id;

    // #3. pass in the member's user id so you get the chapter for the correct user
    $chapter_id = fetch_chapter_id($user_id);

    $member_id = "FAL-" . $chapter_id . "-" . $unique_id;
    
    return $member_id;
}