web-dev-qa-db-ja.com

wp_create_userフック

UserUltra Pro pluginを使用しています。ユーザー登録後にカスタム投稿タイプを作成する必要があります。 UserUltra pluginは私が知っているwp_create_user()のラッパーであるwp_insert_user()を使います。さらに、 'user_register'がwp_insert_user()の後に呼び出されるフックであることを私は知っています。

これ以外に、私は新しいカスタム投稿タイプを作成することはできません。なぜなら、user_registerフックは呼び出されていないようだからです。これは可能ですか?どうやってそれを管理できますか?

2
frabiacca

実際には2つのアクションがありますプロファイルが更新されるときの1つ および ユーザーが登録されるときの1つ

# Fires immediately after an existing user is updated.
do_action( 'profile_update', $user_id, $old_user_data );

# Fires immediately after a new user is registered.
do_action( 'user_register', $user_id );

ユーザログインが空でなく、ユーザ名が存在しない限り、続行する必要があります。 return句を見てください。

if ( empty( $user_login ) ) {
    return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') );
}

if ( ! $update && username_exists( $user_login ) ) {
    return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) );
}

それはあなたがWP_Errorオブジェクトを取り戻さないなら、それは実行されるべきであることを意味します。あなたはあなたのフックが実行されていない場合に物事が壊れるところを絞り込むためにコア関数内の多数のフィルタを試すことができます。エラーが返すbeforeを実行しているものは次のとおりです。

apply_filters( 'pre_user_login', $sanitized_user_login );

これがうまくいけば、プラグインは単にis_wp_error()をチェックせず、失敗したinsert呼び出しを無視します。

<?php /** Plugin Name: Test if wp_insert_user() filters work */
add_filter( 'pre_user_login', function( $user )
{
    var_dump( current_filter()." works fine" );
    return $user;
} );
2
kaiser