delete post meta by AJAX

时间:2013-09-25 作者:Mohamed Badawy

我制作了一个元框,用于通过AJAX删除帖子的特定帖子元键

add_meta_box(\'delete_test_key\', \'delete test key\', \'testdel\', \'post\');
function testdel(){
?>
<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);
        jQuery.ajax({
        url: \'admin-ajax.php\',
        type: \'POST\',
        data: {
                      action : \'ajaxtestdel\'
        },
        success: function(data){
            console.log(data);
            $this.val(\'deleted\');
        }
        });
            });
    </script>
    <?php
 }
和AJAX函数

function ajaxtestdel(){
global $post;
delete_post_meta($post->ID, \'test\');
die();
}
add_action(\'wp_ajax_ajaxtestdel\', \'ajaxtestdel\');
现在的问题是delete_post_meta($post->ID, \'test\'); 不工作,当我把console.log(data); 在里面success 虽然函数delete_post_metaget_post_meta, 这里怎么了?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

你的问题是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 作用

结束

相关推荐

QUERY_POST在通过AJAX调用wp_Query追加时起作用吗?

我将一些关于点击事件的帖子附加到了一个2111子主题上。出于某种原因,它只在我使用query\\u posts循环而不是wp\\u query循环时起作用。例如,下面是我的wp\\U查询循环:$args = array(\'year\' => $year,\'monthnum\' => $month); $loop = new WP_Query($args); if($loop->have_posts()) { while($loop->have_post