你的问题是global $post
.
您必须了解,任何ajax调用都是new http请求nothing 处理发送ajax请求的页面。
如果要将信息从发送请求的页面传递到接收请求的页面,则必须在data
中的参数jQuery.ajax
作用
请注意,打印快捷码的函数将当前post对象作为argumnet接收,因此您可以使用它:
function testdel( $post ) { // note the $post varaible as argument
wp_nonce_field(\'testdel\', \'ajaxsecurity\'); // is a good practise adding nonces
?>
<input type="hidden" value="<?php echo $post->ID; ?>" id="ajaxtestdel_postid">
<tr>
<th scope="row"><label for="del">delete test key</label></th>
<td><input type="button" name="del" id="del" value="delete" class="button"></td>
</tr>
<script>
jQuery(\'#del\').on(\'click\', function(){
var $this = jQuery(this);
var post = jQuery(\'#ajaxtestdel_postid\').val(); // get post id from hidded field
var nonce = jQuery(\'input[name="ajaxsecurity"]\').val(); // get nonce from hidded field
jQuery.ajax({
url: ajax_url, // in backend you should pass the ajax url using this variable
type: \'POST\',
data: { action : \'ajaxtestdel\', postid: post, ajaxsecurity: nonce },
success: function(data){
console.log(data);
$this.val(\'deleted\');
}
});
});
</script>
<?php
}
现在,ajax功能:
function ajaxtestdel() {
$postid = isset($_POST[\'postid\']) ? $_POST[\'postid\'] : \'\';
$nonce = isset($_POST[\'ajaxsecurity\']) ? $_POST[\'ajaxsecurity\'] : \'\';
if ( $postid && $nonce && wp_verify_nonce($nonce, \'testdel\') ) {
$status = delete_post_meta($postid, \'test\') ? \'Error\' : \'Success\';
} else {
$status = \'Error\';
}
die($status);
}
add_action(\'wp_ajax_ajaxtestdel\', \'ajaxtestdel\');
还请注意,将js与php分开是一个很好的做法,因此您的js应该放在一个单独的js文件中,使用
admin_enqueue_script
挂钩和
wp_enqueue_script
作用