0

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

我不知道如何获取 Wordpress 用户 ID 并使用 Salesforce 在 $SFUserID 变量中返回的 ID 更新 usermeta 表。

 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 );
 }
4

1 回答 1

2

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

当前您正在检查 $errors->get_error_code(),如果 $errors 不是 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);
于 2013-04-09T21:23:24.000 回答