web-dev-qa-db-ja.com

Update _ {$ meta_type} _metadataフィルターを使用してメタ値を変更する方法

データベースを挿入する前に投稿メタデータとユーザーメタデータの両方を変更するために、update_{$meta_type}_metadataフィルタを頭に巻き付けようとしています。

docscore を読んだ後、add_metadata関数を続けるにはフィルタがnullを返さなければならないようです。ただし、これは、null以外の値を返すと関数が短絡されるため、$meta_valueをフィルタ処理できないことを意味します。

私はここで何が足りないのですか?そして、より一般的に言えば、それがnullしか返すことができないとき、フィルターを持つことの意味は何ですか?

6
Joost Schulze

問題のコードスニペットは次のとおりです。

$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; 
}
6
birgire