Saving data
基于
Heartbeat API, 您可以在上向发送的心跳信号添加自定义数据
heartbeat-send
js中的事件。这将取代代码示例中的ajax函数。
jQuery( document ).on( \'heartbeat-send\', function ( event, data ) {
// Grab the required form data
data.location = jQuery(\'input[name="location"]:checked\').val();
data.userid = jQuery(\'input[name="userid"]\').val();
});
然后可以使用PHP中的数据
hearbeat_recieved
滤器还有
heartbeat_nopriv_received
筛选无权限环境。
add_filter( \'heartbeat_received\', \'myplugin_save_location_on_heartbeat\', 10, 2 );
function myplugin_save_location_on_heartbeat( $response, $data ) {
// data required
if ( empty( $data[\'location\'] ) || empty( $data[\'userid\'] ) ) {
return $response;
}
// validate
if ( ! is_numeric( $data[\'location\'] ) || ! is_numeric( $data[\'userid\'] ) ) {
return $response;
}
// sanitize
$location = absint( $data[\'location\'] );
$userID = absint( $data[\'userid\'] );
// update
update_user_meta( $userID, \'location_current\', $location );
// optional response
$send_data_back = true;
if ( $send_data_back ) {
$response[\'location\'] = $location;
$response[\'userid\'] = $userID;
}
// send response
return $response;
}
您可以访问数据(来自
hearbeat_recieved
) 再次打开
heartbeat-tick
js中的事件,
jQuery( document ).on( \'heartbeat-tick\', function ( event, data ) {
// Check for our data, and use it.
if ( ! data.location || ! data.userid ) {
return;
}
// use the response as needed
console.log("location: " + data.location);
console.log("user: " + data.userid);
});
Get data
通过一些调整,您可以只获取位置数据,而不是保存它。
首先使用发送用户idheartbeat-send
在js中,
jQuery( document ).on( \'heartbeat-send\', function ( event, data ) {
data.userid = jQuery(\'input[name="userid"]\').val();
});
然后在上用PHP中的当前位置用户meta进行响应
hearbeat_recieved
,
add_filter( \'heartbeat_received\', \'myplugin_get_location_on_heartbeat\', 10, 2 );
function myplugin_get_location_on_heartbeat( $response, $data ) {
// data required
if ( empty( $data[\'userid\'] ) ) {
return $response;
}
// validate
if ( ! is_numeric( $data[\'userid\'] ) ) {
return $response;
}
// sanitize
$userID = absint( $data[\'userid\'] );
// update
$location = get_user_meta( $userID, \'location_current\', true );
// send response
return $response[\'location\'] = $location;
}
EDIT 1: 我想你也可以
get_current_user_id()
在php响应函数中获取用户id,如果您不想或无法在
heartbeat-send
事件
最后,使用上接收的数据更新视图heartbeat-tick
在js中,
jQuery( document ).on( \'heartbeat-tick\', function ( event, data ) {
// Check for our data, and use it.
if ( ! data.location ) {
return;
}
// if using radio buttons
jQuery(\'input[name="location"][value=\'"+data.location+"\']\').prop(\'checked\', true);
// if you want to show result in somewhere else
jQuery(\'#location-output-element\').text(data.location);
});
我希望这有助于回答您的问题。