web-dev-qa-db-fra.com

Moyen efficace de mettre à jour plusieurs post méta

J'ai réussi à mettre à jour post meta en utilisant update_post_meta (). Cependant, plus je poste de messages, plus cela prend du temps. Je voudrais minimiser le temps qu'il faut pour traiter disons environ 400 postes (même si je ne suis pas trop sûr de combien de temps cela va prendre). Actuellement, mon code ressemble à ceci:

    $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();

Cependant, je crains que les modifications apportées ne coûtent cher à mesure que les postes deviennent plus grands. Je voudrais donc demander le meilleur moyen d'y parvenir. Peut-être en utilisant l'instruction SQL? Des idées?

2
wordwannabe

Pour les processus intensifs comme celui-ci, il peut être préférable de planifier un événement WP cron pour gérer le processus sur un programme quotidien ou deux fois par jour.

Extraire cette WP page Codex pour la fonction wp_schedule_event()

1
Courtney Ivey

Peut-être en utilisant l'instruction SQL?

Les requêtes SQL directes sont très dangereuses, notamment lors de la mise à jour de la base de données. À tout le moins, vous obtiendrez un désynchronisation du cache d'objets et risqueriez de manquer l'exécution de l'action d'importation et des filtres.

Si cette mise à jour est quelque chose qui est rarement fait, il est préférable que cela prenne une minute de plus que de risquer l'intégrité de votre système.

1
Mark Kaplun