wp_delete_attachment, wp_delete_file_from_directory и wp_delete_file () не удаляют файл с сервера - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь восстановить файл PDF каждый раз, когда запись сохраняется / обновляется. Имя файла PDF изменяется в соответствии с данными post_meta, поэтому я хочу удалить существующее вложение PDF и файл с сервера при сохранении / обновлении сообщения, прежде чем файл PDF будет регенерирован и прикреплен.

wp_delete_attachment () удаляет вложение в порядке, но файл остается на сервере даже после принудительного удаления.

Я также попытался wp_delete_file_from_directory ($ file, $ path); Возвращает true для удаления файла, но файл остается на сервере. То же самое для wp_delete_file ();

Единственное, что, казалось, работало, это unlink (), но это создает другую проблему, потому что в случае, если имя файла не меняется, unlink (), кажется, ставит остановку создать файл с тем же именем.

       wp_update_post( $my_post );

            if(get_post_status( $post_id ) == "publish"):

                    $existing_PDFs = get_attached_media('application/pdf', $post_id);

                    foreach($existing_PDFs as $pdf):

                       $file = get_attached_file($pdf->ID, true);
                       $path = pathinfo($file, PATHINFO_DIRNAME);

                       wp_delete_file_from_directory( $file, $path);

                       wp_delete_file( $file );

                       wp_delete_attachment($pdf->ID, true);


                    endforeach;

                    include('generate-single-machine-pdf.php');
            endif;

В чем секрет, чтобы Wordpress удалял файл с сервера вместе с вложением?

1 Ответ

0 голосов
/ 20 января 2020

Решением было условное использование unlink после wp_delete_attachment в случае, если созданный PDF имел то же имя, что и удаленный PDF. В этом случае удаление вложений или удаление ссылок не требуется, только для перезаписи существующего файла.

Для обновления сообщений:

$savePath = trailingslashit($uploads_dir).$new_file_name.'.pdf';

$pdf->Output($savePath, 'F');

$existing_PDF = get_attached_media('application/pdf', $post_id);

foreach($existing_PDF as $pdf):

    $oldPDFID= $pdf->ID;

    $file = get_attached_file($oldPDFID, true);

    $old_file_name = pathinfo($file,PATHINFO_BASENAME);

endforeach;

}

$old_pdf = pathinfo($file,PATHINFO_BASENAME);

#######CREATE PDF ATTACHMENT####
$args = array(
    'post_title' => "$new_file_name",
    'post_content' => '',
    'post_mime_type' => 'application/pdf',
);
$new_file_name = $new_file_name.".pdf";

//DELETE OLD ATTACHMENT
if($new_file_name != $old_file_name):
    wp_delete_attachment($oldPDFID, true);
    unlink($file);
endif;

$pdfID = wp_insert_attachment($args, $savePath, $post_id);
...