2

プラグイン用に作成したコードを使用すると、次のエラーが発生します。

エラー:致命的なエラー:335行目の... / wp-login.phpの非オブジェクトでメンバー関数get_error_code()を呼び出します

wp-login.php内でvar_dump($ errors)を実行しようとしましたが、NULLが返されます。

私のプラグイン:(登録ユーザーを外部データベースに追加します)

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

 global $SF_USERNAME;
 global $SF_PASSWORD;
 global $errors;

 try {
   $mySforceConnection = new SforceEnterpriseClient();
   $mySoapClient = $mySforceConnection->createConnection(CD_PLUGIN_PATH . 'Toolkit/soapclient/enterprise.wsdl.xml');
   $mySFlogin = $mySforceConnection->login($SF_USERNAME, $SF_PASSWORD);

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

    } catch (Exception $e) {

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

 }

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

さらに、この関数を使用してプロセスをテストすると、すべてがスムーズに機能します。

  function myplugin_registration_errors ($errors, $sanitized_user_login, $user_email) {
    if ( empty( $_POST['first_name'] ) )
        $errors->add( 'first_name_error', __('<strong>ERROR</strong>: You must include a first name.','mydomain') );

    return $errors;
}
 add_filter( 'registration_errors', 'myplugin_registration_errors', 10, 3 );
4

2 に答える 2

2

フィルタを適用するコードは次のとおりです。

$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

...したがって、関数から$errorsオブジェクトを返す必要があります。現在、コードでは、これは例外が発生した場合にのみ発生します。2番目の関数は常に$errorsを返すため、機能します。

また、$ errorsは関数パラメーターとして渡されるため、グローバルとして定義する必要はありません。

これを試して:

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

    global $SF_USERNAME;
    global $SF_PASSWORD;
    // global $errors; // don't need to do this!

    try {
        $mySforceConnection = new SforceEnterpriseClient();
        $mySoapClient = $mySforceConnection->createConnection(CD_PLUGIN_PATH . 'Toolkit/soapclient/enterprise.wsdl.xml');
        $mySFlogin = $mySforceConnection->login($SF_USERNAME, $SF_PASSWORD);

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

    } catch (Exception $e) {
        $errors->add( 'demo_error', __('<strong>ERROR</strong>: There is a Salesforce problem.','mydomain') );
        // return $errors; // let's move this out of the exception handler block
    }

    return $errors; // always return the $errors object
}

add_filter( 'registration_errors', 'add_user_to_SF', 10, 3 );
于 2013-03-15T07:01:07.393 に答える
0

ロジックに新しいエラーがない場合でも、関数は変数を返す必要があります。$errors

'registration_errors'はフィルターであり、フィルターは常に戻り値を期待します。それがないと、関数はを返しNULL、それがvar_dump()見つかりました。

したがって、基本的な関数本体は次のようになります。

function add_user_to_SF($errors, $sanitized_user_login, $user_email ) {
    try {
    } catch (Exception $e) {
        return $errors;
    }
    return $errors; // important!
}

ソース:https ://wordpress.stackexchange.com/a/90904/33667

于 2013-07-29T07:42:04.467 に答える