插入base64图像作为wordpress帖子附件

时间:2017-06-23 17:24:28

标签: php wordpress

我正在转换base64 png图片中的画布,现在我想将此图像添加为帖子附件。这是我在服务器端的图像:

    $image = 
base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data['pdf_thumbnail_'.$item_id]));

我想使用wp_insert_attachment()将此图片添加为附件。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

使用此代码:

$upload_dir = wp_upload_dir();

// @new
$upload_path = str_replace( '/', DIRECTORY_SEPARATOR, $upload_dir['path'] ) . DIRECTORY_SEPARATOR;

$decoded = $image;
$filename = 'my-base64-image.png';

$hashed_filename = md5( $filename . microtime() ) . '_' . $filename;

// @new
$image_upload = file_put_contents( $upload_path . $hashed_filename, $decoded );

//HANDLE UPLOADED FILE
if( !function_exists( 'wp_handle_sideload' ) ) {
  require_once( ABSPATH . 'wp-admin/includes/file.php' );
}

// Without that I'm getting a debug error!?
if( !function_exists( 'wp_get_current_user' ) ) {
  require_once( ABSPATH . 'wp-includes/pluggable.php' );
}

// @new
$file             = array();
$file['error']    = '';
$file['tmp_name'] = $upload_path . $hashed_filename;
$file['name']     = $hashed_filename;
$file['type']     = 'image/png';
$file['size']     = filesize( $upload_path . $hashed_filename );

// upload file to server
// @new use $file instead of $image_upload
$file_return = wp_handle_sideload( $file, array( 'test_form' => false ) );

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

Source

答案 1 :(得分:0)

**我已使用此代码,因此可以正常工作使用此代码:**

        //HANDLE UPLOADED FILE
    $upload_dir = wp_upload_dir();
    $upload_path = str_replace( '/', DIRECTORY_SEPARATOR, $upload_dir['path'] ) . DIRECTORY_SEPARATOR;
    $image_parts = explode(";base64,",$_POST['image']);
    $decoded = base64_decode($image_parts[1]);
    $filename = 'wigo.png';
   $hashed_filename = md5( $filename . microtime() ) . '_' . $filename;
    $image_upload = file_put_contents( $upload_path . $hashed_filename, $decoded ); 
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    require_once(ABSPATH . 'wp-admin/includes/file.php');


        // Without that I'm getting a debug error!?




        $file             = array();
        $file['error']    = '';
        $file['tmp_name'] = $upload_path . $hashed_filename;
        $file['name']     = $hashed_filename;
        $file['type']     = 'image/png';
        $file['size']     = filesize( $upload_path . $hashed_filename );
        // upload file to server

        // use $file instead of $image_upload
        $file_return = wp_handle_sideload( $file, array( 'test_form' => false ) );
        $filename = $file_return['file'];
        $attachment = array(
                                             'post_mime_type' => $file_return['type'],
                                             'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
                                             'post_content' => '',
                                             'post_status' => 'inherit',
                                             'guid' => $wp_upload_dir['url'] . '/' . basename($filename)
                                             );



        $attach_id = wp_insert_attachment( $attachment, $filename );
        /// generate thumbnails of newly uploaded image


        $attachment_meta = wp_generate_attachment_metadata($attach_id, $filename );
        wp_update_attachment_metadata($attach_id,$attachment_meta);
        set_post_thumbnail($post_id,$attach_id);