Exclua os anexos da imagem da postagem com jQuery da frente

No meu WP 4.4 Twenty Sixteen child theme, eu quero excluir anexos de imagens de postagem de um formulário de frente criado por um plugin. Para alcançar isso, eu segui essa resposta , mas os links de exclusão não eliminam nada (eles me ligam ao topo da página). O que há de errado aqui?

UPDATE [SOLVED]

Com os comentaristas ajudam e depois de corrigir alguns erros resolvi meu problema. Obrigado! Abaixo está o código fixo.

No meu formulário de frente criado por um plugin, recebo o ID da postagem e exibo seus anexos de imagem junto com os links de exclusão:

  $_POST['postid'], 'post_type' => 'attachment', 'post_mime_type' => 'image' )); if ( empty( $images ) ) { // no attachments here } else { echo ''; echo '
'; foreach ( $images as $attachment_id => $attachment ) { echo wp_get_attachment_image( $attachment_id, 'thumbnail' ) . '
'; ?> <a class="remImage" name="" href="#"> <input type="hidden" id="att_remove" name="att_remove[]" value="" /> <input type="hidden" name="nonce" id="nonce" value="" /> <?php } echo '
'; } }?>

Em um subdiretório js do meu plugin criei um script jQuery chamado ‘delete_attachment.js’:

 // this is for jQuery 1.7+ //jQuery('.remImage').on('click', function(event) { // this is for jQuery 1.4.3+ jQuery(document).delegate('.remImage', 'click', function(event) { // this is for jQuery 1.3+ (deprecated) //jQuery('.remImage').live('click', function(event) { event.preventDefault(); var attID = jQuery(this).attr('name'); jQuery.ajax({ type: 'post', url: MyAjax.ajaxurl, data: { action: 'delete_attachment', attID: jQuery(this).attr('name'), _ajax_nonce: jQuery('#nonce').val(), post_type: 'attachment' }, success: function() { console.log('#file-'+attID) jQuery('#file-'+attID).fadeOut(); } }); }) 

Eu enqueued-lo no arquivo de plugin:

 function the_plugin_scripts() { wp_enqueue_script( 'delete-attachment', plugins_url( 'js/delete_attachment.js' , __FILE__ ), array('jquery') ); wp_localize_script( 'delete-attachment', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } add_action( 'wp_enqueue_scripts', 'the_plugin_scripts' ); 

e no mesmo arquivo de plugins adicionei uma function que lida com a solicitação AJAX:

 add_action( 'wp_ajax_delete_attachment', 'delete_attachment' ); function delete_attachment( $post ) { //echo $_POST['attID']; $msg = 'Attachment ID [' . $_POST['attID'] . '] has been deleted!'; if( wp_delete_attachment( $_POST['attID'], true )) { echo $msg; } die(); } 

Solutions Collecting From Web of "Exclua os anexos da imagem da postagem com jQuery da frente"

Agora você precisa lidar com a chamada AJAX em PHP.

 add_action( 'wp_ajax_delete_attachment', 'delete_attachment' ); function delete_attachment( $post ) { //echo $_POST['att_ID']; $msg = 'Attachment ID [' . $_POST['att_ID'] . '] has been deleted!'; if( wp_delete_attachment( $_POST['att_ID'], true )) { echo $msg; } die(); } 

Quanto ao seu evento, basta adicioná-lo à function de clique, então tudo dentro saberá do que você está falando.

 jQuery('.remImage').on('click', function(event) { 

TESTANDO AJAX

Copie e cole isso em suas funções. Ele será executado automaticamente e deve gerar uma resposta do AJAX em um alerta e também no console.


 function ajax_delete_attachment_handler() { $data = json_encode(array('message' => 'THIS IS AJAX WORKING', '$_POST' => $_POST)); wp_send_json_success($data); } $action_name = 'delete_attachment'; add_action("wp_ajax_nopriv_$action_name", 'ajax_delete_attachment_handler'); add_action("wp_ajax_$action_name", 'ajax_delete_attachment_handler'); add_action('wp_footer', function() { ?>  < ?php });