Saya punya masalah serupa beberapa waktu yang lalu dengan impor CSV kustom, tapi saya akhirnya menggunakan beberapa SQL kustom untuk memasukkan massal. Tetapi saya belum melihat jawaban ini pada saat itu:
Optimalkan penyisipan pos dan hapus untuk operasi massal?
untuk digunakan wp_defer_term_counting()
untuk mengaktifkan atau menonaktifkan penghitungan jangka.
Juga jika Anda memeriksa sumber untuk plugin importir WordPress, Anda akan melihat fungsi-fungsi ini tepat sebelum impor massal:
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
dan kemudian setelah memasukkan massal:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
Jadi ini mungkin sesuatu untuk dicoba ;-)
Mengimpor posting sebagai konsep alih - alih mempublikasikan , juga akan mempercepat, karena proses lambat menemukan siput unik untuk masing-masing dilewati. Misalnya, orang dapat mempublikasikannya dalam langkah-langkah yang lebih kecil, tetapi perhatikan bahwa pendekatan semacam ini perlu menandai pos yang diimpor, jadi kami tidak hanya menerbitkan konsep apa pun nanti! Ini membutuhkan perencanaan yang cermat dan kemungkinan besar beberapa pengkodean khusus.
Jika ada misalnya banyak judul posting yang serupa (sama post_name
) yang akan diimpor, maka wp_unique_post_slug()
bisa menjadi lambat, karena iterasi loop permintaan untuk menemukan siput yang tersedia. Ini mungkin dapat menghasilkan sejumlah besar permintaan db.
Sejak WordPress 5.1, pre_wp_unique_post_slug
filter tersedia untuk menghindari iterasi loop untuk siput. Lihat tiket inti # 21112 . Ini sebuah contoh:
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
);
Jika seseorang mencoba misalnya $override_slug = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"
dengan $suffix
sebagai $post_id
, maka kami akan mencatat bahwa $post_id
selalu 0
untuk posting baru, seperti yang diharapkan. Ada berbagai cara untuk menghasilkan angka unik di PHP, seperti uniqid( '', true )
. Tetapi gunakan filter ini dengan hati-hati untuk memastikan Anda memiliki siput unik. Kita bisa mis. Menjalankan kueri penghitungan grup sesudahnya post_name
untuk memastikan.
Opsi lain adalah menggunakan WP-CLI untuk menghindari batas waktu. Lihat misalnya jawaban saya diposting untuk Membuat 20.000 Posting atau Halaman menggunakan file .csv?
Kemudian kita dapat menjalankan skrip impor PHP khusus kami import.php
dengan perintah WP-CLI:
wp eval-file import.php
Juga hindari mengimpor sejumlah besar jenis posting hierarkis, karena UI wp-admin saat ini tidak menanganinya dengan baik. Lihat misalnya Jenis posting kustom - daftar posting - layar putih kematian
Inilah tip hebat dari @otto:
Sebelum memasukkan massal , nonaktifkan autocommit
mode secara eksplisit:
$wpdb->query( 'SET autocommit = 0;' );
Setelah sisipan massal, jalankan:
$wpdb->query( 'COMMIT;' );
Saya juga berpikir itu akan menjadi ide yang baik untuk melakukan pembenahan seperti:
$wpdb->query( 'SET autocommit = 1;' );
Saya belum menguji ini pada MyISAM tetapi ini harus bekerja pada InnoDB .
Seperti disebutkan oleh @kovshenin tip ini tidak akan berfungsi untuk MyISAM .