首页 > 解决方案 > 在 PHP 中,如何在一个函数中重命名字符串并在第二个函数中使用结果

问题描述

如果这是超基本的,请原谅我,我对这一切都很陌生。

我正在尝试从 wordpress 数据库中获取字符串值(章节名称),使用 php 函数重命名该值,然后将重命名的值与其他一些变量连接以创建一个 member_id。

下面是我当前的代码(添加到functions.php文件中),我有两个问题:

  1. 从第一个功能开始,当我在页面/帖子中使用简码时,无论章节名称的值用于注册,[member_chapter]我总是得到。PG如果我切换foreach语句的顺序,那么我总是得到,即无论数据库中实际的章节名称是什么BB,我总是得到第一条语句的返回值。if
  2. 从第二个函数我从来没有得到chapter_id,而是结果总是like FAL--2020-1007,即它不添加从第一个函数生成的chapter_id 值

我真的很感激任何帮助。


/**
 * Fetch chapter name and return as 2-character chapter_id 
 * Create shortcode for viewing chapter_id 
 */
add_action('user_register', 'fetch_chapter');
function fetch_chapter(){
    $current_user = wp_get_current_user();
    $current_user_id = $current_user->ID;
    global $wpdb;
    $result = $wpdb->get_results('SELECT meta_value FROM usermeta WHERE meta_key = \'chapter_name\' AND user_id = ' . $current_user->ID);
    foreach($result as $row){
        if ($row->meta_value = 'Peregrine') {
            return $row->meta_value = 'PG';
        }elseif ($row->meta_value = 'Barbary') {
            return $row->meta_value = 'BB';
        }else { 
            return $row->meta_value;
        }
    }
}
add_shortcode('member_chapter', 'fetch_chapter'); 

/**
 * Generate unique_id
 * Retrieve chapter_id
 * Create member_id
 * Add member_id to user_meta table
 */
add_action('user_register', 'generate_member_id');
function generate_member_id($user_id){
    $unique_id = 1000 + $user_id;
    $chapter_id = fetch_chapter();
    $member_id = "FAL-" . $chapter_id . "-" . date("Y") . "-" . $unique_id;
    update_user_meta($user_id, 'member_id', $member_id);
}

修改后的片段

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

add_action('user_register', 'generate_member_id');
function generate_member_id($user_id){
    $unique_id = 1000 + get_current_user_id();
    $chapter_id = fetch_chapter();
    $member_id = "FAL-" . $chapter_id . "-" . date("Y") . "-" . $unique_id;
    return $member_id;
}

add_shortcode('member_id', 'generate_member_id'); 

标签: phpmysqlwordpress

解决方案


你有几个错误!在编写程序之前,请阅读有关程序语言的更多信息。见PHP 教程

在第一个函数中,您使用了赋值运算符(即是=)而不是比较运算符(即=====)。if您必须在代码中使用的任何地方更改它。此外,您在foreach中使用 return 函数。这意味着您的foreach循环只运行一次然后返回。您必须使用 just if 而不是foreach并在您的 sql 中使用Limit 1 。或者在你的循环中做任何事情并避免else return blahblah. 您的第二个问题与您的第一个问题有关,因为您返回的第一条记录可能$row->meta_value为空。


推荐阅读