web-dev-qa-db-ja.com

複数の投稿メタを更新する効率的な方法

私はupdate_post_meta()を使ってpost metaを更新することに成功しました。ただし、投稿数が多いほど、時間がかかります。処理にかかる時間を最小にしたいのですが、約400の投稿を投稿します(ただし、これにかかる時間はわかりません)。現在私のコードはこのようになっています:

    $numbers = range(1,100000);
    shuffle($numbers); //Randomizing the index (no duplication at all)

    $count = 0; //Begin with an index of 0

    $args = array(
        'post_type' => 'xn_group',
        'post_status' => 'publish'
    );


    //This should get all the posts of xn_group, all of these posts will get the value of its meta_key 'xn_group_order' shuffled (randomized daily).
    $the_query = new WP_Query($args);

    //DIRECT QUERYING...(to reduce time complexity)

    while($the_query->have_posts()) : $the_query->the_post();

        update_post_meta(get_the_ID(), "xn_group_order", $numbers[$count]);
        //$count += mt_Rand(1,10); //Another technique to ensure fair randomization (not necessary).
        $count += 1;

    endwhile;

    wp_reset_query();

しかし、投稿が大きくなるにつれて、変更には多大な費用がかかることになります。だから私はこれを達成するためのより良い方法をお願いしたいと思います。おそらくSQLステートメントを使用しますか?何か案は?

2
wordwannabe

このような集中的なプロセスでは、プロセスを毎日または毎日2回のスケジュールで処理するためにWP cronイベントをスケジュールするのが最善かもしれません。

wp_schedule_event()関数のためのこのWP Codexページをチェックしてください

1
Courtney Ivey

おそらくSQLステートメントを使用しますか?

直接SQLクエリは、特にDBを更新するときに非常に危険です。少なくとも、オブジェクトキャッシュの同期がとれなくなり、インポートアクションとフィルタの実行を見逃す可能性があります。

この更新がめったに行われないことであるならば、それはあなたのシステムの完全性を危険にさらすためにそれからもう1分かかるだろうより良いです。

1
Mark Kaplun