2013-04-09 116 views
0

第一个函数需要一个在Wordpress上注册的用户,并使用'registration_errors'过滤器将他插入到外部数据库中。我还需要将Salesforce系统返回的ID插入Wordpress usermeta表中。最初,我尝试使用$ user_id作为全局wp_insert_user函数来执行update_user_meta($ user_id,'SF_User_ID',$ SFUserID);但是,$ user_id变量没有返回任何东西。现在,我正在尝试在单独的函数中执行update_user_meta,但它需要使用从第一个函数传递的值。当前代码返回此错误:当前代码不起作用,因为$ error没有被返回。向Wordpress用户注册添加额外字段

我无法弄清楚如何获取Wordpress用户标识并更新usermeta表,其中包含Salesforce在$ SFUserID变量中返回的ID。

function add_user_to_SF($errors, $sanitized_user_login, $user_email) { 

    if ($errors->get_error_code()) return $errors; 

    try { 
     $sObject = new stdclass(); 
     $sObject->FirstName = $_POST['user_login']; 
     $sObject->LastName = $_POST['user_login']; 
     $sObject->Email = $_POST['user_email']; 

     $createResponse = $mySforceConnection->create(array($sObject), 'Contact'); 

     $ids = array(); 
      foreach ($createResponse as $createResult) { 
       array_push($ids, $createResult->id); 
       $SFUserID = $createResult->id; 

            add_action('user_register', 'addSFUserID', 10, 1); 
      } 

      } catch (Exception $e) { 

       $errors->add('demo_error', __('<strong>ERROR</strong>: There is a Salesforce problem.','mydomain')); 
       return $errors; 
     } 

       return $errors; 
} 

add_filter('registration_errors', 'add_user_to_SF', 10, 3); 

function addSFUserID($user_id) { 

    update_user_meta($user_id, 'SF_User_ID', $SFUserID); 
} 

回答

2

解决此错误:调用一个成员函数get_error_code()一个非对象

您目前在$错误的情况下检查错误 - $> get_error_code(),是不是wp_error,get_error_code()方法不存在,它会失败。

,以检查其错误,请尝试使用:

is_wp_error($errors); 

http://codex.wordpress.org/Function_Reference/is_wp_error

所以你的if语句会是这个样子:

if (is_wp_error($errors)) return $errors; 

这样,如果没有错误在注册时,它会继续按照您的逻辑进行操作。我没有阅读其余的逻辑,但这是我第一次注意到这个功能。让我知道它是否有效。

重问题的第二部分:

这可能使用了大量的调整,但在回答您的问题的第二部分,我认为最好的方法是使用全局变量。我没有测试过这个代码,但它应该看起来像这样:

$SFUserID = ''; 

function add_user_to_SF($errors, $sanitized_user_login, $user_email) { 

    global $SFUserID; 

    if (is_wp_error($errors)) return $errors; 

    try { 

     $sObject = new stdclass(); 
     $sObject->FirstName = $_POST['user_login']; 
     $sObject->LastName = $_POST['user_login']; 
     $sObject->Email = $_POST['user_email']; 

     $createResponse = $mySforceConnection->create(array($sObject), 'Contact'); 

     $ids = array(); 
     foreach ($createResponse as $createResult) { 
      array_push($ids, $createResult->id); 
      $SFUserID = $createResult->id; 
     } 

    } catch (Exception $e) { 

      $errors->add('demo_error', __('<strong>ERROR</strong>: There is a Salesforce problem.','mydomain')); 
      return $errors; 
    } 

      return $errors; 

} 


function addSFUserID($user_id) { 

    global $SFUserID; 
    if(!empty($SFUserID)) 
     update_user_meta($user_id, 'SF_User_ID', $SFUserID); 

} 

add_filter('registration_errors', 'add_user_to_SF', 10, 3); 
add_action('user_register', 'addSFUserID', 10, 1); 
+0

请澄清,我不明白你的答案如何与我的问题相关。 – MG1 2013-04-09 21:28:51

+0

感谢您的回答,我编辑我的问题多一点澄清。 – MG1 2013-04-09 21:48:48

+1

我看到,对于问题的第二部分,您最好的选择是使用全局变量。我会采取刺探@编辑并将其作为后续答案发布。 – GGG 2013-04-09 22:07:17

相关问题