2016-07-28 79 views
0

我目前正在尝试创建一个功能,将允许某些管理用户删除我们的Wordpress网站上的帖子。更具体地说,直接从Wordpress媒体库中删除文件。我可以通过类型成功检索这些文件并显示它们的名称,但每当我尝试利用unlink()方法从使用中删除某些文件时,它都会搜索相对于php脚本而非服务器的文件。我试过使用$ _SERVER ['DOCUMENT_ROOT']并重复添加“../”,以便返回足够多的目录,然后正确指定文件路径,但这两个选项都不起作用。我也不能在unlink()中使用$ context参数,因为php版本不是最新的,现在更新它是不可行的。下面是我的一些代码:WordPress的/ PHP-取消链接文件搜索目录不包含文件路径

foreach($imgs as $img){ 
$imgcutpath = substr($img, 0, 33); 
fopen($img, "r"); 
$imgpath = str_replace($imgcutpath, "", $img); 
echo "<a href='?delete=1'>         Delete</a>"; 
if (isset($_GET['delete'])) 
{ unlink($_SERVER['DOCUMENT_ROOT'] . $imagepath); } 
} 

而且,这里是我收到警告:

Warning: unlink(/path/to/file/from/server): Is a directory in 
/path/to/php/file/running/this/code/from/server/phpfile.php on line 28 

这是不完全的警告,我简单地更换出于安全原因,实际的文件路径。谢谢您的帮助!

回答

0

如果您知道如何找到相对的文件,可以使用PHP的realpath()函数将其转换为规范路径。

这就是说,我认为你正在走这个错误的方式,而不是依靠WordPress内的库。在你的代码片段中的任何一点,你有没有访问该文件的附件ID?

如果您知道该ID,则可以利用wp_delete_attachment()取消链接媒体库文件。

如果您有帖子ID,而不是附件ID,则可以使用带有帖子ID的get_attached_media(),它会给出您可以迭代的附件ID。

还有更多要考虑,而不仅仅是删除文件。对该文件的引用存储在数据库中,并且该引用被链接到其他事物。使用WordPress提供的工具意味着它将正确处理所有清理工作,而不是手动完成清理工作。

+1

感谢您的建议!绝对有助于使用WordPress库。对于任何有此问题的人,我使用https://frankiejarrett.com/2013/05/get-an-attachment-id-by-url-in-wordpress/中的代码来使用url获取附件标识,然后简单地使用像Jeremy建议的wp_delete_attachment()函数。 –

相关问题