WordPress前端上传问题

时间:2014-12-02 19:58:19

标签: php wordpress

在前端,我创建了一个表单,使用upload_user_file()从前端主题上传文件,每个图像都可以很好地存储在WordPress媒体库中(好像是这样)。

因此,当我上传名为test.jpg的文件时,会在媒体库中创建并显示其相对缩略图。 测试150x150.jpg 测试300x225.jpg 测试1024x768.jpg

我遇到的问题是当我从媒体库中删除此图像时。仅删除创建的缩略图,并在上传文件夹中保持test.jpg不变。如果我直接从媒体库上传此文件,然后删除它,则删除所有文件,包括test.jpg

这是代码,它将值存储在数据库中,并将文件上传到medialibrary。是否有另一个WordPress函数可以使用?我猜upload_user_file()没有在数据库中正确存储图像数据?

global $wpdb;
global $post;

//$table = 'wp_verk1_project'; //$post_slug=$post->post_name;
$table = $wpdb->prefix . "project_name_" . $post_slug=$post->post_name;
$data = array(
    'contributorname' => $_POST['yourname'],
    'email' => $_POST['email'],
    'telephone' => $_POST['telephone'],
    'description' => $_POST['description'],
    'date' => date('Y-m-d'),
    'time' => date('H:i:s'),
    'upload' => upload_user_file($_FILES['file']),
    'upload2' => upload_user_file($_FILES['file2']),
    'upload3' => upload_user_file($_FILES['file3']),
    'upload4' => upload_user_file($_FILES['file4']),
    'upload5' => upload_user_file($_FILES['file5']),
    'rate' => '0'
);
$format = array(
    '%s',
    '%s'
);

$success = $wpdb->insert($table, $data, $format);

if ($success) {
    header("Location: " . get_bloginfo('url') . "/thank-you/");
    exit();
}

edit_user_file():

function upload_user_file( $file = array() ) {

    require_once( ABSPATH . 'wp-admin/includes/admin.php' );

    $file_return = wp_handle_upload( $file, array('test_form' => false ) );

    if( isset( $file_return['error'] ) || isset( $file_return['upload_error_handler'] ) ) {
        return false;
    } else {

        $filename = $file_return['file'];

        $attachment = array(
            'post_mime_type' => $file_return['type'],
            'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
            'post_content' => '',
            'post_status' => 'inherit',
            'guid' => $file_return['url']
        );

        $attachment_id = wp_insert_attachment( $attachment, $file_return['url'] );

        require_once (ABSPATH . 'wp-admin/includes/image.php' );
        $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
        wp_update_attachment_metadata( $attachment_id, $attachment_data );

        if( 0 < intval( $attachment_id ) ) {
            return $attachment_id;
        }
    }

    return false;
}

亲切的问候 约翰

1 个答案:

答案 0 :(得分:1)

我设法解决了我自己的问题。

我深入研究了WordPress的核心文件。

放下以下一行:

$attachment_id = wp_insert_attachment( $attachment, $file_return['url'] );

用这个:

$attachment_id = wp_insert_attachment( $attachment, $filename );

在wp_postmeta中,上传的meta_value设置为完整的网址(http://sitenamen.com/wp-content/upload/2014/12/file.jpg),而它应该像这样存储:2014/12 / file.jpg

现在删除所有文件。