PHP函数在WP前端vs数据库中生成不一致的结果
我有一个生成章节id的函数: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
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(例如,在从
进行用户注册期间),这将是成员用户id,因此您可以为该用户选择章节添加\u操作
- 如果未传入任何用户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;
}