WP_INSERT_POST和WP_UPDATE_POST的死循环

时间:2013-09-03 作者:Anagio

我有一个数组$unqiues 其中包含URL,我使用下面的代码循环数组以获取URL标题,插入新帖子,更新帖子元。然后,我将帖子标题和名称更改为wp\\u insert\\u post返回的$pid。

这创建了一个无休止的循环,我在$unique数组中有大约600个或更少的URL。我在主机上一个小时内就完成了75000个查询,必须等待一个小时才能重置限制。是什么导致了无休止的循环?当我使用数组中的10个URL进行测试时,这段代码起到了作用。

如何更有效地编写?

谢谢

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

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

它肯定可以以更有效的方式编写(未经测试):

$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)");
}
对于600个URL,此代码运行的查询数比您的少1200个,但可能还不够。。。

结束

相关推荐

以正确方式定向到unctions.php

现在,我正在验证一个页面上的表单,然后将结果发送给函数。php通过电子邮件发送表单。现在我正在做以下事情<?php $our_url = get_template_directory_uri();?>... 然后稍后在ajax中使用$.post(\'<?php echo $our_url . \'/functions.php\'; ?>\', $(\"#myform\").serialize(), function(data) {, 这很有效。有点提交表单时,出现了一个错误致命错误