Bir zaman önce özel bir CSV içe aktarma ile benzer sorunlar yaşadım, ancak toplu ekleme için bazı özel SQL kullanarak sona erdi. Ama o zamana kadar bu cevabı görmemiştim:
Toplu ekleme için silme sonrası ekleme ve silme optimize edilmeli mi?
wp_defer_term_counting()
terim saymayı etkinleştirmek veya devre dışı bırakmak için kullanılır .
Ayrıca , WordPress içe aktarma eklentisi için kaynağı kontrol ederseniz, toplu içe aktarmadan hemen önce şu işlevleri görürsünüz:
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
ve sonra toplu ekleme sonra:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
Yani bu denemek için bir şey olabilir ;-)
Yayınları yayınlamak yerine taslak olarak içe aktarmak, her biri için benzersiz bir bilgi bulmanın yavaş süreci atlandığı için işleri hızlandırır. Bunlardan biri daha sonra daha küçük adımlarla yayınlanabilir, ancak bu tür bir yaklaşımın içe aktarılan yayınları bir şekilde işaretlemesi gerektiğine dikkat edin, bu yüzden daha sonra herhangi bir taslak yayınlamıyoruz! Bunun için dikkatli bir planlama ve büyük olasılıkla bazı özel kodlamalar gerekir.
post_name
İçe aktarılacak benzer posta başlıkları (aynı ) gibi çok sayıda varsa wp_unique_post_slug()
, döngü sorgusu yinelemesi nedeniyle kullanılabilir bir bilgi bulmak için yavaşlayabilir. Bu muhtemelen çok sayıda db sorgusu oluşturabilir.
WordPress 5.1'den beri pre_wp_unique_post_slug
, bilgi için döngü yinelemesini önlemek için filtre kullanılabilir. Bkz. Çekirdek bilet # 21112 . İşte bir örnek:
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
);
Biri örneğin as $override_slug = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"
ile çalışırsa , beklendiği gibi her zaman yeni gönderiler için olduğunu not ederiz . PHP gibi benzersiz sayılar oluşturmak için çeşitli yollar vardır . Ancak benzersiz salyangozlara sahip olduğunuzdan emin olmak için bu filtreyi dikkatli kullanın. Emin olmak için daha sonra örneğin bir grup sayısı sorgusu çalıştırabiliriz .$suffix
$post_id
$post_id
0
uniqid( '', true )
post_name
Başka bir seçenek, zaman aşımını önlemek için WP-CLI kullanmak olacaktır . Örneğin , .csv dosyası kullanarak 20.000 Mesaj veya Sayfa Oluşturmak için gönderdiğim yanıta bakın ?
Daha sonra import.php
WP-CLI komutuyla özel PHP içe aktarma komut dosyamızı çalıştırabiliriz :
wp eval-file import.php
Ayrıca, geçerli wp-admin kullanıcı arayüzü iyi işlemediğinden, çok sayıda hiyerarşik gönderi türü içe aktarmaktan kaçının. Örneğin bkz Özel yazı alanı - yayınların listesini - Ölüm beyaz ekran
@Otto'dan harika ipucu:
Toplu eklemeden önce autocommit
modu açıkça devre dışı bırakın:
$wpdb->query( 'SET autocommit = 0;' );
Toplu eklemelerden sonra şunu çalıştırın:
$wpdb->query( 'COMMIT;' );
Ben de bazı temizlik gibi iyi bir fikir olacağını düşünüyorum:
$wpdb->query( 'SET autocommit = 1;' );
Bu MyISAM üzerinde test etmedim ama bu InnoDB üzerinde çalışması gerekir .
@Kovshenin tarafından belirtildiği gibi bu ipucu MyISAM için işe yaramaz .