カスタムフィールドは、[wp-admin/includes/post.php]のhas_meta()でデータベースから取得しています。
順番もこの関数で指定しています。
return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb->postmeta WHERE post_id = %d
ORDER BY meta_key,meta_id", $postid), ARRAY_A );
ORDER BYでmeta_keyが優先されていますが、次のようにmeta_idを優先するように変更すれば、投稿編集画面で追加した順番で表示されるようになります。
return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb->postmeta WHERE post_id = %d
ORDER BY meta_id,meta_key", $postid), ARRAY_A );
has_meta()を次のように変更すると他の部分への影響を少なくする事が出来ます。
他でカスタムフィールドを取得する箇所がある場合は、そちらでは通常通りmeta_keyが優先されます。
function has_meta( $postid, $key = 'meta_key' ) {
global $wpdb;
if ($key == 'meta_id') {
return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb->postmeta WHERE post_id = %d
ORDER BY meta_id,meta_key", $postid), ARRAY_A );
} else {
return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb->postmeta WHERE post_id = %d
ORDER BY meta_key,meta_id", $postid), ARRAY_A );
}
}
投稿編集画面での呼び出し側は、[wp-admin/includes/meta-boxes.php]のpost_custom_meta_box()になります。
$metadata = has_meta($post->ID);
上記を次のように変更するだけで大丈夫です。
$metadata = has_meta($post->ID, 'meta_id');
オーバーライドできませんので、wordpress本体の方を変更することになります。
バージョンアップ時に気をつけてください。
ファイルを上書きしないわけにはいきませんので、その都度今回変更する箇所を再度変更するのが確実だと思います。