我设置了一个函数和一些jQuery,它从用户提交的表单中获取值,并在其自己的表中成功发送到数据库。但是,我正在尝试将其设置为将数据保存为JSON(以确保我的WP表在将来不会膨胀到难以忍受的大小)。
此处的功能:
function search_modifications_callback() {
// Ensure we have the data we need to continue
if( ! isset( $_POST ) || empty( $_POST ) || ! is_user_logged_in() ) {
header( 'HTTP/1.1 400 Empty POST Values' );
echo 'Could Not Verify POST Values.';
exit;
}
$user_id = get_current_user_id(); // Get our current user ID
$search_term = $_POST['saved_search'];
update_user_meta( $user_id, 'saved_search', $search_term ); // Add our user meta
wp_update_user( array(
'ID' => $user_id
) );
exit;
}
add_action( 'wp_ajax_nopriv_search_ss', 'search_modifications_callback' );
add_action( 'wp_ajax_search_ss', 'search_modifications_callback' );
jQuery:
// Form submission listener
jQuery( '#save-search' ).click( function() {
// Grab our post meta value
var ss_val = jQuery( '#save_search_term' ).val();
var user_id = jQuery( '#user_id' ).val();
// Do very simple value validation
if( jQuery( '#save_search_term' ).val() ) {
jQuery.ajax( {
url : ajax_url,
type: 'POST',
data: {
action : 'search_ss',
id: user_id,
'saved_search': ss_val,
}
} )
.success( function( results ) {
console.log( 'User Meta Updated!' );
alert('Search saved!');
} )
.fail( function( data ) {
console.log( data.responseText );
console.log( 'Request failed: ' + data.statusText );
} );
} else {
}
return false; // Stop our form from submitting
} );
我理解我不应该使用'update_user_meta'而应该创建一个对象,但我不确定如何从这里正确设置它。
也可以打开其他建议。谢谢!
答案 0 :(得分:0)
考虑到上述评论,如果您计划每个用户最多保存N个搜索字词,那么我会做以下事情:
function search_modifications_callback() {
// Ensure we have the data we need to continue
if( ! isset( $_POST ) || empty( $_POST ) || ! is_user_logged_in() ) {
header( 'HTTP/1.1 400 Empty POST Values' );
echo 'Could Not Verify POST Values.';
exit;
}
$user_id = get_current_user_id(); // Get our current user ID
$search_term = $_POST['saved_search'];
// Get user's saved search terms
$user_saved_search_terms = get_user_meta( $user_id, 'saved_search' );
// User has some previously saved search terms
if (
$user_saved_search_terms
&& is_array( $user_saved_search_terms )
&& !empty( $user_saved_search_terms )
) {
// This search term doesn't exist in our saved search terms array yet, so let's add it
if ( !in_array($search_term, $user_saved_search_terms) ) {
$user_saved_search_terms[] = $search_term;
/**
* You'll want to add here some logic
* to limit the array to N search terms
*
* For example:
*/
/*
// User has more than 5 saved search terms already,
// let's remove the oldest one
if ( count($user_saved_search_terms) > 5 ){
$user_saved_search_terms = array_shift( $user_saved_search_terms );
}
*/
}
} // User does not have any search terms saved yet
else {
$user_saved_search_terms = array( $search_term );
}
// Finally, save the data
update_user_meta( $user_id, 'saved_search', $user_saved_search_terms );
// What is this for?
wp_update_user( array(
'ID' => $user_id
) );
exit;
}
add_action( 'wp_ajax_nopriv_search_ss', 'search_modifications_callback' );
add_action( 'wp_ajax_search_ss', 'search_modifications_callback' );
这样,您的数据库中每个用户仍然只有一个saved_search
条记录。
请注意,此代码尚未经过测试,因此,如果您有任何问题/意见,请与我们联系。
顺便说一下,如果用户没有登录怎么办?你在某个地方检查这个场景吗?