कस्टम CSV आयात के साथ कुछ समय पहले मुझे भी ऐसी ही समस्याएं थीं, लेकिन मैंने बल्क इंसर्ट के लिए कुछ कस्टम SQL का उपयोग करके समाप्त किया। लेकिन मैंने यह उत्तर तब तक नहीं देखा था:
बल्क ऑपरेशन के लिए पोस्ट इंसर्ट और डिलीट को ऑप्टिमाइज़ करें?
wp_defer_term_counting()
शब्द गणना को सक्षम या अक्षम करने के लिए उपयोग करने के लिए।
यदि आप वर्डप्रेस आयातक प्लगइन के लिए स्रोत की जांच करते हैं , तो आप थोक आयात से ठीक पहले इन कार्यों को देखेंगे:
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
और फिर थोक डालने के बाद:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
तो यह बाहर की कोशिश करने के लिए कुछ हो सकता है ;;;
प्रकाशन के बजाय ड्राफ्ट के रूप में पोस्ट आयात करना , चीजों को गति भी देगा, क्योंकि हर एक के लिए एक अद्वितीय स्लग खोजने की धीमी प्रक्रिया को छोड़ दिया जाता है। उदाहरण के लिए, उन्हें बाद में छोटे चरणों में प्रकाशित किया जा सकता है, लेकिन ध्यान दें कि इस तरह के दृष्टिकोण को किसी तरह आयातित पोस्ट को चिह्नित करने की आवश्यकता होगी, इसलिए हम बाद में किसी भी ड्राफ्ट को प्रकाशित नहीं करते हैं! इसके लिए सावधानीपूर्वक नियोजन की आवश्यकता होगी और सबसे अधिक संभावना है कि कुछ कस्टम कोडिंग।
यदि कोई समान पोस्ट शीर्षक (समान post_name
) के बहुत सारे आयात किए जाने हैं, तो wp_unique_post_slug()
उपलब्ध स्लग खोजने के लिए लूप क्वेरी पुनरावृत्ति के कारण धीमा हो सकता है। यह संभवतः बड़ी संख्या में db क्वेरी उत्पन्न कर सकता है।
वर्डप्रेस 5.1 के बाद pre_wp_unique_post_slug
से स्लग के लिए लूप पुनरावृत्ति से बचने के लिए फ़िल्टर उपलब्ध है। कोर टिकट देखें # 21112 । यहाँ एक उदाहरण है:
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
);
एक कोशिश करता जैसे हैं $override_slug = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"
के साथ $suffix
के रूप में $post_id
, तो हम ध्यान दें होता है कि $post_id
हमेशा होता है 0
की उम्मीद के रूप में नए पदों के लिए,। हालांकि PHP में अद्वितीय संख्याओं को उत्पन्न करने के लिए विभिन्न तरीके हैं, जैसे uniqid( '', true )
। लेकिन इस फ़िल्टर का उपयोग यह सुनिश्चित करने के लिए करें कि आपके पास अद्वितीय स्लग हैं। हम उदाहरण के post_name
लिए सुनिश्चित करने के लिए बाद में एक समूह गणना क्वेरी चला सकते हैं ।
एक अन्य विकल्प यह होगा कि टाइमआउट से बचने के लिए WP-CLI का उपयोग किया जाए । उदाहरण के लिए, .csv फ़ाइल का उपयोग करके 20,000 पोस्ट या पेज बनाने के लिए पोस्ट किए गए मेरे उत्तर देखें ?
फिर हम import.php
WP-CLI कमांड के साथ हमारे कस्टम PHP आयात स्क्रिप्ट को चला सकते हैं :
wp eval-file import.php
इसके अलावा बड़ी संख्या में पदानुक्रमित पोस्ट प्रकारों को आयात करने से बचें, क्योंकि वर्तमान wp-admin UI इसे अच्छी तरह से नहीं संभालता है। उदाहरण के लिए देखें कस्टम पोस्ट प्रकार - पदों की सूची - मौत की सफेद स्क्रीन
यहाँ @ आदर्श से महान टिप है:
थोक आवेषण से पहले , autocommit
मोड को स्पष्ट रूप से अक्षम करें :
$wpdb->query( 'SET autocommit = 0;' );
थोक आवेषण के बाद, चलाएँ:
$wpdb->query( 'COMMIT;' );
मुझे भी लगता है कि कुछ हाउसकीपिंग करना अच्छा होगा, जैसे:
$wpdb->query( 'SET autocommit = 1;' );
मैंने MyISAM पर इसका परीक्षण नहीं किया है लेकिन यह InnoDB पर काम करना चाहिए ।
जैसा कि @kovshenin ने बताया है कि यह टिप MyISAM के लिए काम नहीं करेगा ।