以前にカスタムCSVインポートで同様の問題が発生しましたが、一括挿入にカスタムSQLを使用することになりました。しかし、私はその時までにこの答えを見ていませんでした:
一括操作の挿入と削除を最適化しますか?
wp_defer_term_counting()用語カウントを有効または無効にするために使用します。
また、WordPressインポータープラグインのソースをチェックアウトすると、一括インポートの直前に次の関数が表示されます。
wp_defer_term_counting( true );
wp_defer_comment_counting( true );
そして、一括挿入後:
wp_defer_term_counting( false );
wp_defer_comment_counting( false );
だから、これは試してみるものかもしれません;-)
投稿をインポートする publishの代わりにドラフトすることも、それぞれのユニークなスラッグを見つける遅いプロセスがスキップされるので、物事をスピードアップします。たとえば、後で小さなステップで公開することもできますが、この種のアプローチではインポートされた投稿に何らかの方法でマークを付ける必要があるため、後で下書きを公開するだけではありません。これには、慎重な計画と、おそらくカスタムコーディングが必要です。
たとえばpost_name、インポートする類似の投稿タイトル(同じ)が多数ある場合wp_unique_post_slug()、利用可能なスラッグを見つけるためのループクエリの反復により、遅くなる可能性があります。これにより、大量のdbクエリが生成される可能性があります。
WordPress 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
);
たとえばasを使用$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では適切に処理されないため、多数の階層的な投稿タイプをインポートしないでください。例参照カスタム投稿タイプ-投稿リスト-死の白い画面
@ottoからのすばらしいヒントを次に示します。
一括挿入の前に、autocommitモードを明示的に無効にします。
$wpdb->query( 'SET autocommit = 0;' );
一括挿入後、次を実行します。
$wpdb->query( 'COMMIT;' );
また、次のようなハウスキーピングを行うことをお勧めします。
$wpdb->query( 'SET autocommit = 1;' );
私はこれをMyISAMでテストしていませんが、これはInnoDBで動作するはずです。
以下のように述べたこのチップはのために働かない@kovsheninでのMyISAM。