wake-up-neo.net

Endlosschleife mit wp_insert_post und wp_update_post

Ich habe ein Array $unqiues, das URLs enthält. Ich durchlaufe das Array mit dem folgenden Code, um die URL-Titel abzurufen, einen neuen Beitrag einzufügen und das Beitrags-Meta zu aktualisieren. Dann ändere ich den Titel und Namen des Posts in $ pid, das von wp_insert_post zurückgegeben wurde.

Dies erzeugte eine Endlosschleife, ich habe ungefähr 600 oder weniger URLs in dem $ unique-Array. Ich habe auf meinem Host innerhalb einer Stunde 75.000 Abfragen ausgeführt und muss eine Stunde warten, bis das Limit zurückgesetzt ist. Was hat die Endlosschleife verursacht? Dieser Code hat funktioniert, als ich 10 URLs im Array getestet habe.

Wie kann dies effizienter geschrieben werden?

Vielen Dank

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

Es kann sicher effizienter geschrieben werden (ungetestet):

$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)");
}

Mit 600 URLs führt dieser Code 1200 Abfragen weniger aus als Ihr Code, aber vielleicht reicht er nicht aus ...

3
gmazzap