首先,像这样输出javascript是一种更糟糕的做法。因此,如果您创建javascript文件并使用wp_enqueue_script
钩住的admin_enqueue_scripts
行动
function enqueue_my_ajax( $hook ) {
if( \'post.php\' != $hook && \'post-new.php\' != $hook ) return;
// if you use in theme use get_template_directori_uri to retrieve the url
wp_enqueue_script( \'my_ajax_script\', plugins_url(\'/my_ajax_script.js\', __FILE__) );
}
add_action( \'admin_enqueue_scripts\', \'enqueue_my_ajax\' );
其次,当您使用metabox和ajax时,最好使用nonces。您可以使用
wp_nonce_field
在metabox中创建隐藏的nonce输入,并检索值并使用ajax发布。
登记入住Codex 有关上述函数的详细信息。
关于这个问题,post Id应该通过ajax传递,或者ajaxResponse
无法使用它。
因此,显示元数据库的功能应该是:
function wpse_54822_inner_custom_box( $post ) {
$current_count = get_post_meta($post->ID, \'_increment_key\', true) ? : 1;
wp_nonce_field( \'increment_my_count\', \'_nonce_count\' );
?>
<input type="hidden" id="_count" name="_count" value="<?php echo $current_count ? : 1; ?>" />
<input type="hidden" id="_postid" name="_postid" value="<?php echo $post->ID; ?>" />
<div id="counter"><?php printf( \'Current Count: %d\', $current_count ); ?></div>
<input type="button" name="button" class="button button-primary submitmeplease" value="<?php _e(\'Update\'); ?>" />
<?php } ?>
您的javascript(在如上所列的my\\u ajax\\u script.js文件中)应该是:
jQuery(document).ready(function($){
$(\'.submitmeplease\').on(\'click\', function(e){
e.preventDefault();
var nonce = $(\'input[name="_nonce_count"]\').val();
var count = $(\'#_count\').val();
var id = $(\'#_postid\').val();
$.ajax({
url: ajaxurl,
type: \'POST\',
data: { _nonce_count: nonce, action: \'update_my_count\', _count: count, postid: id },
success: function( data ) {
if (data != \'\' && data != \'0\')
$(\'#_count\').val( data );
$(\'#counter\').html(\'Current Count: \' + data)
}
});
});
});
您的
myUpdateCount
功能应为:
function myUpdateCount() {
if ( ! check_admin_referer( \'increment_my_count\', \'_nonce_count\' ) ) die();
$postid = isset( $_POST[\'postid\'] ) && $_POST[\'postid\'] ? $_POST[\'postid\'] : null;
if ( ! $postid ) die();
if ( ! current_user_can(\'edit_posts\', $postid) ) die();
$new_count = isset( $_POST[\'_count\'] ) && $_POST[\'_count\'] ? $_POST[\'_count\'] + 1 : 1;
update_post_meta($postid, \'_increment_key\', $new_count);
die( (string)$new_count );
}
add_action(\'wp_ajax_update_my_count\', \'myUpdateCount\');