Tôi đã gặp vấn đề tương tự trước đây khi nhập CSV tùy chỉnh, nhưng tôi đã kết thúc bằng cách sử dụng một số SQL tùy chỉnh để chèn hàng loạt. Nhưng tôi đã không thấy câu trả lời này sau đó:
Tối ưu hóa bài chèn và xóa cho các hoạt động hàng loạt?
để sử dụng wp_defer_term_counting()
để kích hoạt hoặc vô hiệu hóa tính thời hạn.
Ngoài ra nếu bạn kiểm tra nguồn cho plugin nhập khẩu WordPress, bạn sẽ thấy các chức năng này ngay trước khi nhập hàng loạt:
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
và sau đó chèn số lượng lớn:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
Vì vậy, đây có thể là một cái gì đó để thử ;-)
Nhập bài viết dưới dạng bản nháp thay vì xuất bản , cũng sẽ tăng tốc mọi thứ, vì quá trình chậm chạp trong việc tìm kiếm một con sên duy nhất cho mỗi cái bị bỏ qua. Người ta có thể ví dụ xuất bản chúng sau này trong các bước nhỏ hơn, nhưng lưu ý rằng cách tiếp cận này sẽ cần đánh dấu các bài đăng được nhập bằng cách nào đó, vì vậy chúng tôi không xuất bản bất kỳ bản nháp nào sau này! Điều này sẽ cần lập kế hoạch cẩn thận và rất có thể là một số mã hóa tùy chỉnh.
Nếu có rất nhiều tiêu đề bài tương tự (giống nhau post_name
) được nhập, thì wp_unique_post_slug()
có thể trở nên chậm, do lặp lại truy vấn vòng lặp để tìm một sên có sẵn. Điều này có thể có thể tạo ra một số lượng lớn các truy vấn db.
Vì WordPress 5.1, pre_wp_unique_post_slug
bộ lọc có sẵn để tránh vòng lặp cho sên. Xem vé lõi # 21112 . Đây là một ví dụ:
add_filter( 'pre_wp_unique_post_slug',
function( $override_slug, $slug, $post_id, $post_status, $post_type, $post_parent ) {
// Set a unique slug value to shortcircuit the slug iteration loop.
// $override_slug = ...
return $override_slug;
}, 10, 6
);
Nếu một cố gắng ví dụ như $override_slug = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"
với $suffix
như $post_id
, sau đó chúng tôi xin lưu ý rằng $post_id
luôn luôn là 0
bài mới, như mong đợi. Có nhiều cách khác nhau để tạo ra các số duy nhất trong PHP, như thế uniqid( '', true )
. Nhưng hãy cẩn thận sử dụng bộ lọc này để đảm bảo bạn có những con sên độc đáo. Chúng tôi có thể ví dụ chạy một truy vấn đếm nhóm sau đó post_name
để chắc chắn.
Một lựa chọn khác là sử dụng WP-CLI để tránh thời gian chờ. Xem ví dụ câu trả lời của tôi được đăng để Tạo 20.000 Bài đăng hoặc Trang bằng tệp .csv?
Sau đó, chúng ta có thể chạy tập lệnh nhập PHP tùy chỉnh của mình bằng lệnh import.php
WP-CLI:
wp eval-file import.php
Ngoài ra, tránh nhập số lượng lớn các loại bài đăng phân cấp, vì giao diện người dùng wp-admin hiện tại không xử lý tốt. Xem ví dụ: Loại bài đăng tùy chỉnh - danh sách bài viết - màn hình trắng của cái chết
Đây là mẹo tuyệt vời từ @otto:
Trước khi chèn hàng loạt , hãy tắt autocommit
chế độ một cách rõ ràng:
$wpdb->query( 'SET autocommit = 0;' );
Sau khi chèn số lượng lớn, chạy:
$wpdb->query( 'COMMIT;' );
Tôi cũng nghĩ rằng sẽ là một ý tưởng tốt để làm một số công việc vệ sinh như:
$wpdb->query( 'SET autocommit = 1;' );
Tôi đã không thử nghiệm điều này trên MyISAM nhưng nó sẽ hoạt động trên InnoDB .
Như được đề cập bởi @kovshenin, mẹo này sẽ không hiệu quả với MyISAM .