Việc lập trình thêm hình ảnh vào thư viện phương tiện với wp_generate_attachment_metadata ngẫu nhiên không thành công


8

Tôi đang chạy phiên bản WordPress mới nhất (4.6) trên máy chủ LAMP (lưu trữ chia sẻ) với phiên bản PHP 5.6.12.

Tôi cố gắng để lập trình thêm 10 hình ảnh , tải lên với ftp đến wp-uploadsthư mục, vào thư viện phương tiện truyền thông bằng cách sử dụng ba chức năng WordPress wp_insert_attachment, wp_generate_attachment_metadatawp_update_attachment_metadata.

Vấn đề của tôi:

Đôi khi, tập lệnh PHP của tôi hoạt động (tất cả 10 hình ảnh được thêm vào thư viện phương tiện một cách chính xác) - và đôi khi nó không (trong số 10 hình ảnh, chỉ có 4, 5, 6 hoặc hơn được thêm vào)! Mỗi hình ảnh có kích thước 2M - 4M.

Những gì tôi đã làm cho đến nay:

Tôi đã kích hoạt error_logging thông qua php.ini và phát hiện ra rằng thỉnh thoảng wp_generate_attachment_metadatakhông thành công (nghĩa là trong khi xử lý hình ảnh thứ 5, 6, 7 hoặc hơn) và toàn bộ tập lệnh PHP của tôi chấm dứt. Tôi không nhận được thêm thông tin nào từ error_log () ngoài điều đó. Vì tôi nghi ngờ có vấn đề về bộ nhớ, tôi đã tăng kích thước bộ nhớ cho php lên 120M (nhà cung cấp dịch vụ lưu trữ của tôi cho tôi 128M) và thực thi tập lệnh lên 100 giây (nhà cung cấp dịch vụ lưu trữ của tôi cho tôi 120 giây). Tất cả các tệp tồn tại (tất nhiên), tất cả chúng đều là PNG - và, như tôi đã nói, sử dụng cùng một bộ 10 hình ảnh để thử nghiệm, đôi khi nó hoạt động và đôi khi nó không hoạt động ...

Câu hỏi của tôi:

  • Có một vấn đề được biết đến với wp_generate_attachment_metadataWP 4.6? Mọi thứ được sử dụng để hoạt động tốt cho đến khi tôi nâng cấp trang web của mình từ WP 4.3 lên 4.6 ...

  • Nếu không đủ bộ nhớ gây ra sự cố, làm cách nào tôi có thể tối ưu hóa tập lệnh PHP của mình để xử lý giới hạn bộ nhớ 128M do trình duyệt web của tôi cung cấp?

  • Làm thế nào để tôi biết nếu thiếu bộ nhớ khiến tập lệnh PHP của tôi chấm dứt?

Cảm ơn trước!

Đây là mã của tôi:

$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');

for($i = 0; $i < 10; $i++) {
  $attachment = array(
    'post_mime_type' => 'image/png',
    'post_title' => 'my description',
    'post_content' => 'my description',
    'post_status' => 'inherit'
  );
  $image_id = wp_insert_attachment($attachment, $images[$i], $post_id);
  $image_data = wp_generate_attachment_metadata($image_id, $images[$i]);
  wp_update_attachment_metadata($image_id, $image_data);
}

Câu trả lời:


12

Tôi đã kiểm tra mã của bạn và tôi nghĩ rằng bạn đang thiếu hướng dẫn của hình ảnh. Xin vui lòng xem mã dưới đây:


$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');

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

foreach($images as $name) {
    $attachment = array(
        'guid'=> $wp_upload_dir['url'] . '/' . basename( $name ), 
        'post_mime_type' => 'image/png',
        'post_title' => 'my description',
        'post_content' => 'my description',
        'post_status' => 'inherit'
         );
$image_id = wp_insert_attachment($attachment, $name, $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( $image_id, $name );
wp_update_attachment_metadata( $image_id, $attach_data );
}

Để biết chi tiết, hãy xem hàm wp_insert_attachment .


Cảm ơn bạn đã chỉ ra mất tích guidcho tôi. Tôi sẽ thêm nó vào mã của mình, thử lại và cho bạn biết nếu điều đó giải quyết được vấn đề.
Sebastian

1
Hừm, có vẻ như mất tích guidgây ra vấn đề. Với hướng dẫn được thêm vào, bây giờ nó hoạt động 100%. Trong khi với hướng dẫn bị thiếu, đôi khi nó hoạt động, đôi khi nó không - lạ :-) CẢM ƠN ashikra
Sebastian

Chào mừng bạn @Sebastian :)
Syed Fakhar Abbas
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.