URLを含む$unqiues
という配列があります。URLのタイトルを取得し、新しい投稿を挿入し、投稿メタを更新するには、以下のコードで配列をループ処理します。それから私は投稿のタイトルと名前をwp_insert_postによって返された$ pidに変更します。
これにより無限ループが発生しました。$ unique配列には約600以下のURLがあります。私はちょうど私のホスト上で1時間以内に75,000クエリをヒットし、制限がリセットされるまで1時間待たなければなりません。無限ループの原因は何ですか?このコードは、配列内の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 );
}
確かにもっと効率的な方法で書くことができます(未テスト)。
$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回少なくなりますが、おそらく十分ではありません...