bp_core_signup_user 挂钩不工作(PHP、BuddyPress、Wordpress 和 Parse.com)
bp_core_signup_user hook not working (PHP, BuddyPress, Wordpress, & Parse.com)
我一直在尝试连接到 WordPress 注册操作,以便我可以将新用户的帐户信息存储在我的 Parse.com 用户数据库中。但是,由于我使用的是 BuddyPress,WP 挂钩 user_register
似乎不起作用。
在线研究后,我似乎应该使用 BP 挂钩 bp_core_signup_user
,但这似乎不起作用,所有关于如何实现它的在线信息都是多年以前的并且可能已经过时了。有问题的是,BuddyPress 根本没有好的 Codex,所以我有点卡住了。我已经在这几个小时了,但无法弄清楚。
这是我为挂钩注册过程而创建的函数:
<?php
// Saves the newly registered BP user account to the Parse DB.
add_action('bp_core_signup_user', 'saveNewParseUser', 10, 5);
function saveNewParseUser($userId, $userLogin, $userPass, $userEmail, $userMeta) {
//Commit new user data to an HTTP POST request to Parse.
$url = 'https://api.parse.com/1/users';
$postdata = array(
"wpUserId" => $userId,
"username" => $userLogin,
"password" => $userPass,
"email" => $userEmail,
"fullName" => $userMeta[display_name],
"firstName" => $userMeta[first_name],
"lastName" => $userMeta[last_name]
);
$appID = "a5TtlVG52JKTC************************";
$restAPIKey = "Qc86jA8dy1FpcB**************************";
$options = array();
$options[] = "Content-type: application/json";
$options[] = "X-Parse-Application-Id: $appID";
$options[] = "X-Parse-REST-API-Key: $restAPIKey";
$options[] = "X-Parse-Revocable-Session: 1";
//open connection
$ch = curl_init($url);
//sets the number of POST vars & POST data
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postdata),
CURLOPT_HTTPHEADER => $options,
CURLOPT_RETURNTRANSFER => true
));
//execute post
$result = curl_exec($ch);
$resultArray = json_decode($result, true);
//Error check
if (curl_errno($ch)) {
echo "Error Code " . curl_errno() . ": " . curl_error($ch);
}
//Retrieve and place Parse user session token & ID into WP DB user account.
add_user_meta($userId, 'parseSessionToken', $resultArray[sessionToken]);
add_user_meta($userId, 'parseObjId', $resultArray[objectId]);
curl_close($ch);
}
我做错了什么?这甚至没有像它本来的那样被钩住和 运行 吗?
我知道它不起作用,因为我在注册帐户后检查了 Parse User DB 并且没有创建新行,并且我放入 WP 帐户的元信息根本没有显示在那里。
有趣的是,当我在函数末尾包含一个 exit;
调用时,当我挂接到 WP 的 user_register
(使用适当的参数和 postdata
数组设置)时,这个 DID 工作,这基本上阻止了注册过程通过 BuddyPress 及其激活程序,而是直接通过 Wordpress 直接注册。这也让网页显示了 HTTP 请求的输出响应——它是 Parse 预期的 JSON 响应主体,所以我知道它确实有效。为什么在避开 BuddyPress 时它会起作用? BuddyPress 似乎是这里的问题所在。 (如果您想查看我为此所做的不同操作的代码,那么我可以 post 它。)
感谢您的帮助。
我弄清楚出了什么问题,我觉得自己像个彻头彻尾的白痴,因为它本来应该很明显的。
我的函数没有任何问题 - 我只是没有意识到它包含的自定义插件被禁用了!显然,在我的问题成为问题之前,我重命名了 PHP 文件,删除了服务器上的文件,然后放入了新文件时发生了这种情况。
我吸取了教训。现在我知道更改插件的文件将停用整个插件。
因此,我对 user_registration
的钩子仍然可以正常工作,并且没有必要通过 bp_core_signup_user
钩子,所以我恢复了前者。供任何想知道的人将来参考,这是我使用的最后一个函数:
<?php
// Saves the newly registered WP user account to the Parse DB.
add_action('user_register', 'saveNewParseUser');
function saveNewParseUser($newUserId) {
//Retrieve the new User object from WP's DB.
$newUser = get_userdata($newUserId);
//Commit new user data to an HTTP POST request to Parse.
$url = 'https://api.parse.com/1/users';
$postdata = array(
"wpUserId" => $newUserId,
"username" => $newUser->user_login,
"password" => $newUser->user_pass,
"email" => $newUser->user_email,
"fullName" => $newUser->display_name,
"firstName" => $newUser->first_name,
"lastName" => $newUser->last_name
);
$appID = "a5TtlVG52JKTCbc*******************";
$restAPIKey = "Qc86jA8dy1F************************";
$options = array();
$options[] = "Content-type: application/json";
$options[] = "X-Parse-Application-Id: $appID";
$options[] = "X-Parse-REST-API-Key: $restAPIKey";
$options[] = "X-Parse-Revocable-Session: 1";
//open connection
$ch = curl_init($url);
//sets the number of POST vars & POST data
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postdata),
CURLOPT_HTTPHEADER => $options,
CURLOPT_RETURNTRANSFER => true
));
//execute post
$result = curl_exec($ch);
$resultArray = json_decode($result, true);
//Error check
if (curl_errno($ch)) {
echo "Error Code " . curl_errno() . ": " . curl_error($ch);
}
//Retrieve and place Parse user session token & ID into WP DB user account.
add_user_meta($newUserId, 'parseSessionToken', $resultArray[sessionToken]);
add_user_meta($newUserId, 'parseObjId', $resultArray[objectId]);
curl_close($ch);
}
我一直在尝试连接到 WordPress 注册操作,以便我可以将新用户的帐户信息存储在我的 Parse.com 用户数据库中。但是,由于我使用的是 BuddyPress,WP 挂钩 user_register
似乎不起作用。
在线研究后,我似乎应该使用 BP 挂钩 bp_core_signup_user
,但这似乎不起作用,所有关于如何实现它的在线信息都是多年以前的并且可能已经过时了。有问题的是,BuddyPress 根本没有好的 Codex,所以我有点卡住了。我已经在这几个小时了,但无法弄清楚。
这是我为挂钩注册过程而创建的函数:
<?php
// Saves the newly registered BP user account to the Parse DB.
add_action('bp_core_signup_user', 'saveNewParseUser', 10, 5);
function saveNewParseUser($userId, $userLogin, $userPass, $userEmail, $userMeta) {
//Commit new user data to an HTTP POST request to Parse.
$url = 'https://api.parse.com/1/users';
$postdata = array(
"wpUserId" => $userId,
"username" => $userLogin,
"password" => $userPass,
"email" => $userEmail,
"fullName" => $userMeta[display_name],
"firstName" => $userMeta[first_name],
"lastName" => $userMeta[last_name]
);
$appID = "a5TtlVG52JKTC************************";
$restAPIKey = "Qc86jA8dy1FpcB**************************";
$options = array();
$options[] = "Content-type: application/json";
$options[] = "X-Parse-Application-Id: $appID";
$options[] = "X-Parse-REST-API-Key: $restAPIKey";
$options[] = "X-Parse-Revocable-Session: 1";
//open connection
$ch = curl_init($url);
//sets the number of POST vars & POST data
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postdata),
CURLOPT_HTTPHEADER => $options,
CURLOPT_RETURNTRANSFER => true
));
//execute post
$result = curl_exec($ch);
$resultArray = json_decode($result, true);
//Error check
if (curl_errno($ch)) {
echo "Error Code " . curl_errno() . ": " . curl_error($ch);
}
//Retrieve and place Parse user session token & ID into WP DB user account.
add_user_meta($userId, 'parseSessionToken', $resultArray[sessionToken]);
add_user_meta($userId, 'parseObjId', $resultArray[objectId]);
curl_close($ch);
}
我做错了什么?这甚至没有像它本来的那样被钩住和 运行 吗?
我知道它不起作用,因为我在注册帐户后检查了 Parse User DB 并且没有创建新行,并且我放入 WP 帐户的元信息根本没有显示在那里。
有趣的是,当我在函数末尾包含一个 exit;
调用时,当我挂接到 WP 的 user_register
(使用适当的参数和 postdata
数组设置)时,这个 DID 工作,这基本上阻止了注册过程通过 BuddyPress 及其激活程序,而是直接通过 Wordpress 直接注册。这也让网页显示了 HTTP 请求的输出响应——它是 Parse 预期的 JSON 响应主体,所以我知道它确实有效。为什么在避开 BuddyPress 时它会起作用? BuddyPress 似乎是这里的问题所在。 (如果您想查看我为此所做的不同操作的代码,那么我可以 post 它。)
感谢您的帮助。
我弄清楚出了什么问题,我觉得自己像个彻头彻尾的白痴,因为它本来应该很明显的。
我的函数没有任何问题 - 我只是没有意识到它包含的自定义插件被禁用了!显然,在我的问题成为问题之前,我重命名了 PHP 文件,删除了服务器上的文件,然后放入了新文件时发生了这种情况。
我吸取了教训。现在我知道更改插件的文件将停用整个插件。
因此,我对 user_registration
的钩子仍然可以正常工作,并且没有必要通过 bp_core_signup_user
钩子,所以我恢复了前者。供任何想知道的人将来参考,这是我使用的最后一个函数:
<?php
// Saves the newly registered WP user account to the Parse DB.
add_action('user_register', 'saveNewParseUser');
function saveNewParseUser($newUserId) {
//Retrieve the new User object from WP's DB.
$newUser = get_userdata($newUserId);
//Commit new user data to an HTTP POST request to Parse.
$url = 'https://api.parse.com/1/users';
$postdata = array(
"wpUserId" => $newUserId,
"username" => $newUser->user_login,
"password" => $newUser->user_pass,
"email" => $newUser->user_email,
"fullName" => $newUser->display_name,
"firstName" => $newUser->first_name,
"lastName" => $newUser->last_name
);
$appID = "a5TtlVG52JKTCbc*******************";
$restAPIKey = "Qc86jA8dy1F************************";
$options = array();
$options[] = "Content-type: application/json";
$options[] = "X-Parse-Application-Id: $appID";
$options[] = "X-Parse-REST-API-Key: $restAPIKey";
$options[] = "X-Parse-Revocable-Session: 1";
//open connection
$ch = curl_init($url);
//sets the number of POST vars & POST data
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postdata),
CURLOPT_HTTPHEADER => $options,
CURLOPT_RETURNTRANSFER => true
));
//execute post
$result = curl_exec($ch);
$resultArray = json_decode($result, true);
//Error check
if (curl_errno($ch)) {
echo "Error Code " . curl_errno() . ": " . curl_error($ch);
}
//Retrieve and place Parse user session token & ID into WP DB user account.
add_user_meta($newUserId, 'parseSessionToken', $resultArray[sessionToken]);
add_user_meta($newUserId, 'parseObjId', $resultArray[objectId]);
curl_close($ch);
}