扩展WP的上传/插入媒体功能

时间:2012-02-20 作者:nandac

我正在编写第一个插件,将PDF文件上载到用户指定的目录,而不是“设置”下“媒体”菜单中指定的媒体目录。

我需要扩展WP的本机上载程序,以便将特定类型的文件(在本例中为PDF)上载到与图像不同的目录。此外,无论何时需要将此用户定义目录中上载的文件插入页面或帖子,都应该可以在本机上载/插入窗口中查看这些文件。

是否可以通过插件扩展WP的本机上传程序,或者我必须设计自己的上传程序?考虑到已经有一个很好的上传程序可用,这似乎对于一种类型的文件来说太过分了。

我不认为深入研究WP的代码并修改它是一种选择。

提前谢谢。

1 个回复
最合适的回答,由SO网友:Matthew Muro 整理而成

这两种都是可能的。

使用将附件插入媒体库wp_insert_attachment function, 您可以将上载的图像插入媒体库。

以下是文档中的示例代码:

<?php
  $wp_filetype = wp_check_filetype(basename($filename), null );
  $wp_upload_dir = wp_upload_dir();
  $attachment = array(
     \'guid\' => $wp_upload_dir[\'baseurl\'] . _wp_relative_upload_path( $filename ), 
     \'post_mime_type\' => $wp_filetype[\'type\'],
     \'post_title\' => preg_replace(\'/\\.[^.]+$/\', \'\', basename($filename)),
     \'post_content\' => \'\',
     \'post_status\' => \'inherit\'
  );
  $attach_id = wp_insert_attachment( $attachment, $filename, 37 );
  // you must first include the image.php file
  // for the function wp_generate_attachment_metadata() to work
  require_once(ABSPATH . \'wp-admin/includes/image.php\');
  $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
  wp_update_attachment_metadata( $attach_id, $attach_data );
?>
更改上载目录要更改上载目录,您需要使用upload_dir 滤器Yoast has a pretty good tutorial 关于如何做到这一点。

add_filter(\'upload_dir\', \'my_upload_dir\');
$upload = wp_upload_dir();
remove_filter(\'upload_dir\', \'my_upload_dir\');

function my_upload_dir($upload) {
    $upload[\'subdir\']   = \'/sub-dir-to-use\' . $upload[\'subdir\'];
    $upload[\'path\']     = $upload[\'basedir\'] . $upload[\'subdir\'];
    $upload[\'url\']      = $upload[\'baseurl\'] . $upload[\'subdir\'];
    return $upload;
}

结束