wp_delete_attachment,wp_delete_file_from_directory

每当保存/更新帖子时,我都在尝试重新生成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从服务器中删除文件以及附件的秘诀是什么?


哈士奇WWW
浏览 92回答 1
1回答

翻过高山走不出你

解决方案是在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 ATTACHMENTif($new_file_name != $old_file_name):    wp_delete_attachment($oldPDFID, true);    unlink($file);endif;$pdfID = wp_insert_attachment($args, $savePath, $post_id);
打开App,查看更多内容
随时随地看视频慕课网APP