データベースを挿入する前に投稿メタデータとユーザーメタデータの両方を変更するために、update_{$meta_type}_metadata
フィルタを頭に巻き付けようとしています。
docs と core を読んだ後、add_metadata
関数を続けるにはフィルタがnull
を返さなければならないようです。ただし、これは、null以外の値を返すと関数が短絡されるため、$meta_value
をフィルタ処理できないことを意味します。
私はここで何が足りないのですか?そして、より一般的に言えば、それがnull
しか返すことができないとき、フィルターを持つことの意味は何ですか?
問題のコードスニペットは次のとおりです。
$check = apply_filters( "update_{$meta_type}_metadata",
null, $object_id, $meta_key, $meta_value, $prev_value );
if ( null !== $check )
return (bool) $check;
このフィルタは与えられた型のメタデータの更新を防止するだけで、メタデータ自体を明示的に変更することはできません。
このフィルタを使ってメタデータを変更したい場合は、たとえば次のようにします。
add_filter( 'update_post_metadata', 'wpse_163859', 10, 5 );
update_post_meta( $post_id = 123, 'test', 'ABCDEF' );
ここで、
function wpse_163859( $check, $object_id, $meta_key, $meta_value, $prev_value )
{
// Avoid infinite recursion:
remove_filter( current_filter(), __FUNCTION__ );
// Modify the meta value;
$meta_value = strtolower( $meta_value );
// Do something else ...
// Update the modified value.
update_post_meta( $object_id, $meta_key, $meta_value, $prev_value );
// Return something else than null
return true;
}