不正なカスタムフィールドがたくさんあります。空白の値を削除すれば、DB内のかなりの領域をクリアできると思います。次のようにデータベースに問い合わせたとします。
select * from wp_postmeta where meta_value = ''
871038(!)
私の質問は、これらを削除しても大丈夫ですか?これを行うことから生じる可能性のある問題はありますか?
空のカスタムフィールドを削除しても大丈夫です。
主な理由は、フィールドが設定されていない場合、get_post_meta( $id, 'metakey', true )
が空の文字列を返すため、空のレコードセットを設定するのと同じことです。
get_post_meta( $id, 'metakey', false )
は、値が設定されていない場合は空の配列を返すので、問題ないはずです。
この呼び出しに戻るときに空の値が設定されますが、データベースにレコードがない場合は設定されないため、すべてのメタデータを一度に取得すること(get_post_meta( $id )
)が唯一の問題となります。これはいくつかのPHP_WARNING
sを引き起こす可能性がありますが、大丈夫です。
@fischiが指摘したように、get_post_meta()
は存在しない空のメタキーに対して同じ値を返すため、すべてのメタデータを一度に取得するときに設定されているキーに頼らない限り、空の値を削除しても安全です。
WP 3.1では、フィルターadd_{$meta_type}_metadata
およびupdate_{$meta_type}_metadata
を導入しました。これらのフィルターを使用して、空の値をクリーンアップしたり、データベースに保存されないようにすることもできます。 https://codex.wordpress.org/ Plugin_API/Filter_Reference/update_(meta_type)_metadata
たとえば、次のように 'my_prefix'を含むすべてのキーの偽の値をインターセプトして削除できます。
add_filter('update_post_metadata', function($check, $object_id, $meta_key, $meta_value, $prev_value) {
if(strpos($meta_key, 'my_prefix')) {
if(empty($meta_value)) {
delete_post_meta($object_id, $meta_key, $prev_value);
return true; //stop update
}
}
return null; //do update
}, 10, 5);
これは、既存のレコードをクリーンアップしないことに注意してください。