2012-08-07 4 views
2

지금 WP 수작업 문서를 몇 시간 동안 보았지만 아직도 을 찾을 수 없습니다. 플러그인을 작성 중이며 페이지를 새로 고치지 않고도 옵션을 업데이트 할 수 있습니다. 나는 그것을 wp-load를 통해 을 달성 할 수 있었지만, 나쁜 습관을 알고 그것을 바르게하고 싶습니다.WordPress WP_ajax가 작동하지 않습니다.

일단 내가 모든 것을 가지고 있으면 자바 스크립트를 별도의 .js 파일로 이동합니다. 작동 중입니다.

모든 코드는 단일 페이지에 있습니다. ajax 을 통해 일부 옵션을 업데이트하려고하는데 작동하지 않습니다. 응답이 성공했지만 현재current_form 옵션이 업데이트되지 않고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.

코드가 지금에 업데이트됩니다

wp_enqueue_script('AWNT_save_form_data', plugin_dir_url(__FILE__) . 'includes/save_form_data.js', array('jquery')); 

wp_localize_script('AWNT_save_form_data', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request 
    'ajaxurl'   => admin_url('admin-ajax.php'), 

    // generate a nonce with a unique ID "myajax-post-comment-nonce" 
    // so that you can check it later when an AJAX request is sent 
    'postCommentNonce' => wp_create_nonce('myajax-post-comment-nonce'), 
    ) 
); 

add_action('wp_ajax_AWNT_save', 'AWNT_save_callback'); 

function AWNT_save_callback() { 
update_option('current_form', '5'); 
$nonce = $_POST['postCommentNonce']; 
if (! wp_verify_nonce($nonce, 'myajax-post-comment-nonce')) 
    die ('Busted!'); 
update_option('current_form', 'foo'); 
echo get_option('current_form'); 
die(); 
} 

JS 파일 (save_form_data.js) :

jQuery(document).ready(function($) { 
$('#save').click(function() { 
     var data = { 
      action: 'AWNT_save', 
      postCommentNonce : MyAjax.postCommentNonce, 
      form_name : $('#form_name').val(), 
customC: $('#customC').is(":checked"), 
no_throttle: $('#no_throttle').is(":checked"), 
form_code : $('#form_code').val()}; 

     jQuery.post(MyAjax.ajaxurl, data, function(response) { 
      alert('Response: ' + response); 
     }); 
    }); 
}); 

스크립트가 추가되고 , 0의 응답에 대한 경고를 표시하지만, update_option 중 전화를받지 않았거나 작동하지 않습니다. current_form은 동일하게 유지됩니다.

답변

0

당신은 http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/

먼저 는 자바 스크립트 파일을 분리 읽고 추가 할 wp_enqueue_script 를 사용해야합니다. 그런 다음 wp_localize_script을 사용하여 nonce 및 ajaxurl을 자바 스크립트 파일에 전달하십시오. 에서

wp_localize_script('your-js-file', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request 
    'ajaxurl'   => admin_url('admin-ajax.php'), 

    // generate a nonce with a unique ID "myajax-post-comment-nonce" 
    // so that you can check it later when an AJAX request is sent 
    'postCommentNonce' => wp_create_nonce('myajax-post-comment-nonce'), 
    ) 
); 


// if both logged in and not logged in users can send this AJAX request, 
// add both of these actions, otherwise add only the appropriate one 
add_action('wp_ajax_AWNT_save', 'AWNT_save_callback'); 
add_action('wp_ajax_nopriv_AWNT_save', 'AWNT_save_callback'); 

function AWNT_save_callback() { 

//CHeck nonce FIRST HERE 

$nonce = $_POST['postCommentNonce']; 

// check to see if the submitted nonce matches with the 
// generated nonce we created earlier 
if (! wp_verify_nonce($nonce, 'myajax-post-comment-nonce')) 
    die ('Busted!') 

update_option('current_form', 'foo'); 
echo get_option('current_form'); 

die(); 
} 

function.php에서

당신이

add_action('wp_ajax_AWNT_save_callback', 'AWNT_save_callback'); 
add_action('wp_ajax_nopriv_AWNT_save_callback', 'AWNT_save_callback'); 

내가 후크 이름이 잘못 말은해야 자바 스크립트 파일

jQuery(document).ready(function($) { 
$('#save').click(function() { 
     var data = { 
      action: 'AWNT_save', 
      postCommentNonce : MyAjax.postCommentNonce, 
      form_name : $('#form_name').val(), 
customC: $('#customC').is(":checked"), 
no_throttle: $('#no_throttle').is(":checked"), 
form_code : $('#form_code').val()}; 

     jQuery.post(MyAjax.ajaxurl, data, function(response) { 
      alert('Response: ' + response); 
     }); 
    }); 
}); 
+0

감사합니다. 그래도 여전히 작동하지 않는 것 같습니다. 업데이트 된 원래 질문. –

+0

죄송합니다 답변에 오타가 있습니다. add_action ('wp_ajax_nopriv)을 찾아서 문제가 해결되었는지 확인하십시오. – chifliiiii

+0

나는 그것을 보았습니다. 관리자 권한이있는 사용자 만 사용할 수있는 플러그인 옵션 페이지가 있어야한다고 생각하지 마십시오. 방금 시도했지만 아직 아무것도하지 않았습니다. 스크립트가 제대로 실행되고 있지만 모든 값이 정확하며 응답이 성공적으로 유지됩니다. 그러나 콜백에서 update_option 라인으로 옵션을 업데이트하지는 않습니다. –

관련 문제