Intereting Posts
current_user_can () возвращает FALSE, но отладка говорит TRUE Условно-пользовательский тип почтового переписывания Как показать контент без выдержки? Установите сетевой аватар по умолчанию Статическая домашняя страница игнорируется Как уменьшить нагрузку / отсутствие запросов в базе данных MySql Сравните the_excerpt () с the_content () Пользовательское подменю WordPress Поле настраиваемого профиля для <textarea> Перемещенный сайт, старые ссылки на страницах, все еще указывающие на старый хост Добавить фильтр в список Admin для всех пользовательских типов сообщений по их пользовательским таксономии Изменение постоянной информации Структура для последовательного номера для каждого сообщения? Как я могу разрешить ошибку внутреннего сервера .htaccess, устанавливая многопользовательский WordPress? Пытается использовать shortcode для плагина на собственной домашней странице отзывчивой темы Можно ли удалить редактор полей Rich Text для определенного сообщения?

Удалить вложения изображения с jQuery с передней стороны

В моей детской теме WP 4.4 Twenty Sixteen я хочу удалить вложенные вложения изображения из форматирования, созданного плагином. Чтобы добиться этого, я последовал этому ответу , но ссылки на удаление ничего не удаляют (они связывают меня в верхней части страницы). Что здесь не так?

ОБНОВЛЕНИЕ [РЕШЕНО]

С помощью комментаторов и после исправления некоторых ошибок я решил свою проблему. Спасибо! Ниже приведен фиксированный код.

В моей форме на лицевой панели, созданной плагином, я получаю идентификатор сообщения и отображаю его вложения изображений вместе со ссылками удаления:

<!-- Display item thumbnails --> <?php if( 'POST' == $_SERVER['REQUEST_METHOD'] && isset( $_POST['postid'] ) ) { $images = get_children( array ( 'post_parent' => $_POST['postid'], 'post_type' => 'attachment', 'post_mime_type' => 'image' )); if ( empty( $images ) ) { // no attachments here } else { echo '<label for="item_thumbnails">Post thumbnails</label>'; echo '<div class="item_thumbnails">'; foreach ( $images as $attachment_id => $attachment ) { echo wp_get_attachment_image( $attachment_id, 'thumbnail' ) . '<br>'; ?> <!-- add a 'Delete' link --> <a class="remImage" name="<?php echo $attachment_id; ?>" href="#"><?php _e('delete');?></a> <input type="hidden" id="att_remove" name="att_remove[]" value="<?php echo $attachment_id; ?>" /> <input type="hidden" name="nonce" id="nonce" value="<?php echo wp_create_nonce( 'delete_attachment' ); ?>" /> <?php } echo '</div>'; } }?> 

В подкаталоге «js» моего плагина я создал сценарий jQuery с именем «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(); } }); }) 

Я выделил его в файле плагина:

 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' ); 

и в том же файле плагина я добавил функцию, которая обрабатывает запрос 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(); } 

Теперь вам нужно обработать вызов AJAX в 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(); } 

Что касается вашего мероприятия, просто добавьте его в функцию щелчка, тогда все внутри узнает, о чем вы говорите.

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

ТЕСТИРОВАНИЕ AJAX

Скопируйте и вставьте это в свои функции. Он будет автоматически запускаться и должен выводить ответ от AJAX в предупреждении, а также на консоли.


 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() { ?> <script> jQuery.ajax({ type: 'POST', cache: false, dataType: 'json', url: "/wp-admin/admin-ajax.php", data: { action: 'delete_attachment', ID: 'some ID here', 'foo': 'bar' }, success: function (response) { // we encoded the data, so let's decode it first var json = JSON.parse(response.data); console.log('response: ', response); console.log('json parsed: ', json); alert(response.data); }, fail: function (response) { console.log('FAILED: ' + response); } }); </script> <?php });