2017-03-18 25 views
0

ログインしたユーザーのみのモーダルを作成しました。ユーザーがcloseアイコンをクリックすると、特定のユーザーのユーザーメタフィールドを更新します。WP AJAXがupdate_user_meta(複数の値を持つ)を更新していません

私のモーダルのコードは次のようになります。私はuser_metaを更新するために必要な情報を格納data-id属性を使用してい

function theme_notification_popup() {  
    $level = get_user_meta($user_id, 'author_level', true); ?> 

    <div id="my-id" class="uk-modal" data-uk-modal="{center:true}"> 
     <div class="uk-modal-dialog"> 
      <a class="uk-modal-close uk-close" data-id="<?php echo esc_attr($level[0]); ?>-notification-read"></a> 
      <h4>Title</h4></div>  
      ...content... 
     </div> 
    </div>   
<?php } 
add_action ('wp_footer', 'theme_notification_popup'); 

AJAXは、これを処理する方法であるので、ここで私のAJAXコードは

jQuery('document').ready(function($) { 

     jQuery('#uk-modal').on('click', '.uk-modal-close', function(e) { 
      e.preventDefault(); 

      var levelRead = $('.uk-modal-close').attr('data-id'); 

       $.ajax({ 
        url : ajax_url, 
        type: 'POST', 
        data: { 
         action : 'km_ajax', 
         'data-id': levelRead, 
        } 
       }) 
       .success(function(results) { 
        // console.log('User Meta Updated!'); 
        console.log(levelRead); 
       }) 
       .fail(function(data) { 
        console.log(data.responseText); 
        console.log('Request failed: ' + data.statusText); 
       }); 

      return false; 
     }); 

    }); 

だし、ここに必要なコールバックは、私はユーザーがクリックしたときにAJAXが成功したことがわかりコンソールで

add_action('wp_ajax_nopriv_km_ajax', 'km_ajax_callback'); 
add_action('wp_ajax_km_ajax', 'km_ajax_callback'); 
function km_ajax_callback() { 

    if(! empty($_POST['data-id'])) { 

     $user_id = get_current_user_id(); 

     if (empty($user_id)) { 
      return false; 
     } 

     $level = get_user_meta($user_id, 'author_level', true); 

     $new_val = sanitize_text_field($_POST['data-id']); 

     update_user_meta($user_id, 'author_level', array($level[0], $new_val)); 
    } 

    wp_die(); 

} 

ですcloseボタン。ただし、user_metaは更新されません。これは私のkm_ajax_callback()機能に間違いがなければならないことを意味します。それとも別の場所?

誰でも私が間違っていることを教えてもらえますか?それとも私は行方不明ですか?

答えて

0

をどこに問題がある、私が見つけました。結局、AJAXコードには何も問題はありません。

私はまた、余分な機能を

function theme_achievements() { 

    $value = user_total_posts(get_current_user_id()) 

    if($value >= '0' && $value <= '499') { 
     update_user_meta(get_current_user_id(), 'author_level', array('lvl-1', '')); 
    } elseif($value >= '500' && $value <= '999') { 
     update_user_meta(get_current_user_id(), 'author_level', array('lvl-2', '')); 
    } else { 
     ... 
    } 

} 

add_action('wp_head', 'theme_achievements'); 

を作成した上でこの関数は、AJAXの更新を上書きし、毎回実行されます。上記の関数を処理するためのよりよい方法に関するアイデアですか? wp_headを使用する代わりに、他に何かありますか?

関連する問題