cutmail's blog

write the code

WordPressで同じようなタイトルの記事を投稿しようとする際にエラーになる件について

現行の2.7あたりだと大丈夫なのですが、

  • 2.3.3からアップグレードしたWPで日本語または英語の重複タイトルを送信
  • 新規インストールのWP 2.5で日本語の重複タイトルを送信

などの条件が重なると無限ループに陥るようです。

この場合、以下のように修正したら大丈夫でした。

wp-includes/post.phpの1269〜1279行目あたり

<?php

if ($post_name_check || in_array($post_name, $wp_rewrite->feeds) ) {
	$suffix = 2;
	do {
		$alt_post_name = substr($post_name, 0, 200-(strlen($suffix)+1)). "-$suffix";
		$alt_post_name = urldecode ($alt_post_name);	//追加
		// expected_slashed ($alt_post_name, $post_name, $post_type)
		$post_name_check = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM $wpdb->posts WHERE post_name = '$alt_post_name' AND post_type = '$post_type' AND ID != %d AND post_parent = %d LIMIT 1", $post_ID, $post_parent));
		$suffix++;
	} while ($post_name_check);
	$post_name =urlencode($alt_post_name);	//変更
}
?>

同一のタイトルであるかのチェックをしているループの部分が抜けれないために、無限ループに陥っているようです。
なお、現状の2.7では修正されているようです。