web-dev-qa-db-fra.com

Boucle sans fin avec wp_insert_post et wp_update_post

J'ai un tableau $unqiues qui contient les URL, je boucle sur le tableau avec le code ci-dessous pour obtenir les titres d'URL, insère un nouveau message, met à jour le méta de la publication. Ensuite, je change le titre et le nom des publications en $ pid qui a été renvoyé par wp_insert_post.

Cela a créé une boucle sans fin, j'ai environ 600 ou moins d'URL dans le tableau $ unique. Je viens d'appuyer 75 000 requêtes en une heure sur mon hôte et je dois attendre une heure pour que la limite se réinitialise. Quelle est la cause de la boucle sans fin? Ce code a fonctionné lorsque j'ai testé avec 10 URL dans le tableau.

Comment cela peut-il être écrit plus efficacement?

Merci

foreach($uniques as $unique){
      $pagetitle = getTitle($unique);
      $new_post = array(
            'post_title' => $unique,
            'post_status'   => 'publish',
            'post_type' => 'websites'
        );
        $pid = wp_insert_post($new_post);

        update_post_meta($pid,'title', $pagetitle);
        update_post_meta($pid,'url',$unique);


          $my_post = array(
              'ID'           => $pid,
              'post_title' => $pid,
              'post_name' => $pid
          );

          wp_update_post( $my_post );
}
3
Anagio

Cela peut certainement être écrit de manière plus efficace (non testé):

$added = array();
global $wpdb;
foreach($uniques as $unique){
  $pagetitle = getTitle($unique);
  $new_post = array(
    'post_title' => $unique,
    'post_status' => 'publish',
    'post_type' => 'websites'
  );
  $pid = wp_insert_post($new_post);
  if ($pid) {
    $wpdb->query( $wpdb->prepare(
      "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) VALUES
       (%d, '%s', '%s'), (%d, '%s', '%s')",
       $pid, 'title', $pagetitle, $pid, 'url', $unique
    ) );
    $added[] = $pid;
  }
}
if ( ! empty($added) ) {
   $ids = implode(',', $added); 
   $wpdb->query("UPDATE $wpdb->posts SET `post_title` = `ID`, `post_name` = `ID` WHERE `ID` IN ($ids)");
}

Avec 600 URL, ce code exécute 1200 requêtes moins que votre, mais peut-être pas assez ...

3
gmazzap