将AJAX数据作为JSON保存到WP表

时间:2018-04-04 15:05:42

标签: php json ajax wordpress

我设置了一个函数和一些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'而应该创建一个对象,但我不确定如何从这里正确设置它。

也可以打开其他建议。谢谢!

1 个答案:

答案 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条记录。

请注意,此代码尚未经过测试,因此,如果您有任何问题/意见,请与我们联系。

顺便说一下,如果用户没有登录怎么办?你在某个地方检查这个场景吗?