#php #wordpress
#php #wordpress
Вопрос:
Я создаю пользовательский загрузчик файлов WordPress в своей пользовательской теме, и теперь мне нужно иметь возможность удалять каждый файл при нажатии кнопки. У меня есть это до сих пор:
<?php
$attachments = get_posts(
array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
)
);
foreach ( $attachments as $attachment ) {
$file_link = wp_get_attachment_url($attachment->ID, "full");
$file_img = wp_get_attachment_image($attachment->ID);
$file_title = get_the_title($attachment->ID);
$size_media = filesize(get_attached_file($attachment->ID));
$total_size = ($size_media) / 1000;
?>
<div>
<a href="http:<?php echo $file_link; ?>" target="_blank">
<div>
<?php if (strpos($file_link, '.png') !== false || strpos($file_link, '.jpg') !== false || strpos($file_link, '.gif') !== false || strpos($file_link, '.tif') !== false ) {
echo '<span class="material-icons">insert_photo</span>';
} else {
echo '<span class="material-icons">description</span>';
}
?>
</div>
</a>
</div>
<div>
<a href="http:<?php echo wp_get_attachment_url($attachment->ID, "full"); ?>" target="_blank">
<p><?php echo $file_title; ?></p>
</a>
<p>Size: <?php echo $total_size; ?>KB</p>
<a href="<?php wp_delete_attachment( $attachment->ID ); ?>">Delete</a>
</div>
<?php } ?>
}
Происходит то, что при нажатии на ссылку удаления ВСЕ файлы удаляются. Я этого не хочу. Мне нужен только один файл, в котором была нажата ссылка, для удаления.
Ответ №1:
Вы делаете неверное предположение о php-функциях, включенных в html. Что делает php, так это выводит некоторый html. В вашем случае то, что вы делаете, это:
<a href="<?php wp_delete_attachment( $attachment->ID ); ?>">Delete</a>
Это говорит WordPress немедленно удалить вложение. Затем он ничего не возвращает, поэтому ваш html будет выглядеть так:
<a href="">Delete</a>
Что вам нужно, так это функция javascript, которая выполняет ajax-запрос, чтобы сообщить серверному php удалить определенное вложение. Вы можете вызвать это в html:
<a href="deleteFile(<?php echo $attachment->ID ?>);">Delete</a>
Это приведет к следующему html:
<a onclick="deleteFile(30);">Delete</a>
Теперь вы можете пойти и написать вызываемую функцию javascript deleteFile
, которая принимает идентификатор вложения в качестве аргумента. Он должен отправить идентификатор на сервер и вызвать wp_delete_attachment( $_GET['id'] )
.