Hace algún tiempo tuve problemas similares con una importación de CSV personalizada, pero terminé usando un SQL personalizado para la inserción masiva. Pero no había visto esta respuesta para entonces:
¿Optimizar la inserción y eliminación de publicaciones para operaciones masivas?
para usar wp_defer_term_counting()
para habilitar o deshabilitar el conteo de términos.
También si revisa la fuente para la El complemento de importación de WordPress, verá estas funciones justo antes de la importación masiva:
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
y luego después de la inserción masiva:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
Entonces, esto podría ser algo para probar ;-)
Importar publicaciones como draft en lugar de publicar , también acelerará las cosas, ya que se omite el proceso lento de encontrar un slug único para cada una. Se podría, por ejemplo, publíquelas más tarde en pasos más pequeños, pero tenga en cuenta que este tipo de enfoque debería marcar las publicaciones importadas de alguna manera, ¡así que no solo publicamos los borradores más tarde! Esto requeriría una planificación cuidadosa y muy probablemente alguna codificación personalizada.
Otra opción sería utilizar WP-CLI para evitar el tiempo de espera. Ver por ejemplo Mi respuesta publicada para ¿Creando 20,000 publicaciones o páginas usando un archivo .csv?
También evite importar un gran número de tipos de publicaciones jerárquicas, ya que la interfaz de usuario actual de wp-admin no lo maneja bien. Ver por ejemplo Tipo de publicación personalizada - lista de publicaciones - pantalla blanca de la muerte
Aquí está el gran consejo de @otto:
Antes de inserciones masivas , deshabilite el modo autocommit
explícitamente:
$wpdb->query( 'SET autocommit = 0;' );
Después de las inserciones masivas, ejecuta:
$wpdb->query( 'COMMIT;' );
También creo que sería una buena idea hacer algunas tareas de limpieza como:
$wpdb->query( 'SET autocommit = 1;' );
No he probado esto en MyISAM pero esto debería funcionar en InnoDB .
Como mencionado por @kovshenin, esta sugerencia no funcionaría para MyISAM .