Lập trình thêm hình ảnh vào thư viện phương tiện


10

Tôi đang cố gắng lập trình thêm nhiều hình ảnh vào thư viện phương tiện, tôi đã tải hình ảnh lên wp-content/uploads, bây giờ tôi thử sử dụng wp_insert_attachement.

Đây là mã, tuy nhiên nó không hoạt động như mong đợi, tôi nghĩ siêu dữ liệu không được tạo đúng cách, tôi có thể thấy các tệp trong thư viện phương tiện, nhưng không có hình thu nhỏ, nếu tôi chỉnh sửa hình ảnh, tôi gặp lỗi khi tải lên lại hình ảnh .

$filename_array = array(
   'article1.jpg',
   'article2.jpg',
);

// The ID of the post this attachment is for.
$parent_post_id = 0;

// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();

foreach ($filename_array as $filename) {

    // Check the type of file. We'll use this as the 'post_mime_type'.
    $filetype = wp_check_filetype( basename( $filename ), null );

    // Prepare an array of post data for the attachment.
    $attachment = array(
        'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );

    // Insert the attachment.
    $attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );

    // Make sure that this file is included, as   wp_generate_attachment_metadata() depends on it.
    require_once( ABSPATH . 'wp-admin/includes/image.php' );

    // Generate the metadata for the attachment, and update the database record.
    $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
    wp_update_attachment_metadata( $attach_id, $attach_data );

}

Câu trả lời:


10
$image_url = 'adress img';

$upload_dir = wp_upload_dir();

$image_data = file_get_contents( $image_url );

$filename = basename( $image_url );

if ( wp_mkdir_p( $upload_dir['path'] ) ) {
  $file = $upload_dir['path'] . '/' . $filename;
}
else {
  $file = $upload_dir['basedir'] . '/' . $filename;
}

file_put_contents( $file, $image_data );

$wp_filetype = wp_check_filetype( $filename, null );

$attachment = array(
  'post_mime_type' => $wp_filetype['type'],
  'post_title' => sanitize_file_name( $filename ),
  'post_content' => '',
  'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $file );
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 );

1
$ Đính kèm đến từ đâu?
Dan Hastings

nó đã bị mất ... tôi đã thêm nó
Omtara

1
Tệp đã tải xuống nhưng không có hình thu nhỏ khả dụng, url đính kèm cũng cung cấp 404
Umair Hamid

@Umair Hamid Tương tự ở đây. Điều này là do đối số thứ hai wp_insert_attachmentphải là đường dẫn tệp (vì vậy $filetrong ví dụ này), không phải tên tệp. Tôi chỉnh sửa câu trả lời, chờ phê duyệt.
philippe_b

và làm thế nào tôi có thể nhận được url mới?
iKamy

2

Tôi gặp vấn đề với giải pháp của @ TrubinE khi các tệp hình ảnh không được tải.

Dưới đây là một ví dụ hoàn chỉnh phù hợp với tôi: https://gist.github.com/m1r0/f22d5237ee93bcccb0d9

Đây là một ý tưởng tương tự nhưng sử dụng thư viện WP HTTP để tìm nạp nội dung so với file_get_contents (). Dưới đây là nội dung của giải pháp github gist từ m1r0:

        if( !class_exists( 'WP_Http' ) )
        include_once( ABSPATH . WPINC . '/class-http.php' );
    $http = new WP_Http();
    $response = $http->request( $meta[ 'image_url' ] );
    if( $response['response']['code'] != 200 ) {
        return false;
    }
    $upload = wp_upload_bits( basename($meta[ 'image_url' ]), null, $response['body'] );
    if( !empty( $upload['error'] ) ) {
        return false;
    }
    $file_path = $upload['file'];
    $file_name = basename( $file_path );
    $file_type = wp_check_filetype( $file_name, null );
    $attachment_title = sanitize_file_name( pathinfo( $file_name, PATHINFO_FILENAME ) );
    $wp_upload_dir = wp_upload_dir();

    $post_info = array(
        'guid'           => $wp_upload_dir['url'] . '/' . $file_name,
        'post_mime_type' => $file_type['type'],
        'post_title'     => $attachment_title,
        'post_content'   => '',
        'post_status'    => 'inherit',
    );

    $attach_id = wp_insert_attachment( $post_info, $file_path, $parent_post_id );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file_path );
    wp_update_attachment_metadata( $attach_id,  $attach_data );
    return $attach_id; code here

Hoàn hảo, cảm ơn bạn
Rob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.