媒体句柄上传奇怪的东西

时间:2011-05-21 作者:Harjeet Singh

我正在使用前端脚本上传图像,一切正常,但最近我注意到上传的图像没有保存在正确的目录中。我的设置是将上载内容组织到基于月份和年份的文件夹中。我的文件夹是2011->03,04,05(3月、4月、5月)。问题是,如果我今天上传一个文件,它会保存在文件夹03(三月)中。如果我使用wp\\u handle\\u upload,则图像会保存在适当的文件夹05(5月)中,但图像不会显示在媒体库中,也不会产生不同的大小。

我使用的代码是

$image = media_handle_upload(\'async-upload\', \'\');

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

查看此函数的第一行:

function media_handle_upload(
    $file_id, 
    $post_id, 
    $post_data = array(), 
    $overrides = array( \'test_form\' => false )
) 
{

    $time = current_time(\'mysql\');
    if ( $post = get_post($post_id) ) {
        if ( substr( $post->post_date, 0, 4 ) > 0 )
            $time = $post->post_date;
    }

    $name = $_FILES[$file_id][\'name\'];
    $file = wp_handle_upload($_FILES[$file_id], $overrides, $time);
时间取自发布日期。你可以绕过media_handle_upload() 和使用wp_handle_upload() 直接地

更新我没有时间写一个完全独立的示例,但这里是我的主题选项类的摘录。它可以处理上传,生成不同大小的图像和附件id。它由通用保存功能调用,可以一次性处理多个上传的文件。

/**
 * Saves uploaded files in media library and the corresponding id in option field.
 *
 * @return void
 */
protected function handle_uploads()
{
    if ( ! isset ( $_FILES ) or empty ( $_FILES ) )
    {
        return;
    }

    foreach ( $_FILES as $file_key => $file_arr )
    {
        // Some bogus upload.
        if ( ! isset ( $this->fields[$file_key] )
            or empty ( $file_arr[\'type\'] )
        )
        {
            continue;
        }

        if ( ! $this->is_allowed_mime( $file_key, $file_arr ) )
        {
            set_theme_mod( $file_key . \'_error\', \'wrong mime type\' );
            continue;
        }

        // The file is allowed, no error until now and the type is correct.
        $uploaded_file = wp_handle_upload(
            $file_arr
        ,   array( \'test_form\' => FALSE )
        );

        // error
        if ( isset ( $uploaded_file[\'error\'] ) )
        {
            set_theme_mod( $file_key . \'_error\', $uploaded_file[\'error\'] );
            continue;
        }

        // add the file to the media library

        // Set up options array to add this file as an attachment
        $attachment = array(
            \'post_mime_type\' => $uploaded_file[\'type\']
        ,   \'post_title\'     => $this->get_media_name(
                                    $file_key, $uploaded_file[\'file\']
                                )
        );

        // Adds the file to the media library and generates the thumbnails.
        $attach_id = wp_insert_attachment(
            $attachment
        ,   $uploaded_file[\'file\']
        );

        $this->create_upload_meta( $attach_id, $uploaded_file[\'file\'] );

        // Update the theme mod.
        set_theme_mod( $file_key, $attach_id );
        remove_theme_mod( $file_key . \'_error\' );
    }
}

/**
 * Adds meta data to the uploaded file
 *
 * @param  int $attach_id
 * @param  string $file
 * @return void
 */
protected function create_upload_meta( $attach_id, $file )
{
    // Create meta data from EXIF fields.
    require_once ABSPATH . \'wp-admin/includes/image.php\';
    $attach_data = wp_generate_attachment_metadata(
        $attach_id
    ,   $file
    );
    wp_update_attachment_metadata($attach_id,  $attach_data);
}
一些注意事项:

  • is_allowed_mime() 检查中设置的MIME类型$fields 在我的控制器中设置。例如,favicon的MIME类型为image/x-iconimage/vnd.microsoft.icon.
  • get_media_name() 可以为附件使用预定义的名称(例如徽标)$attach_id 并将其用于post meta字段或类似的内容

结束

相关推荐

如何通过phpMyAdmin编辑数据库中的插件文件?

我需要通过phpmyadmin编辑WordPress插件和主题文件的指导如果我想编辑一个特定的插件文件或从数据库中完全删除一个插件,我可以找到它们,但我可以找到选项、注释、链接等的数据表。我不知道如何在那里编辑/删除特定的插件或主题。有人能告诉我如何在数据库中找到一个特定的插件或整个“插件”文件夹吗?非常感谢。