サポート » バグ報告と提案 » Contact Form 7の「5.4.1」でwp_get_current_user()が動作しない

  • Contact Form7の「5.4.1」のアクションフック「wpcf7_submit」内にて、wp_get_current_user()が動作しなくなりました。「5.3.2」では動作していました。これは不具合でしょうか?

    add_action( 'wpcf7_submit', 'wpcf7_submit_original', 10, 2 );
    function wpcf7_submit_original( $instance, $result ) {
        // ここが正常に取得できない
        $user = wp_get_current_user();
    }

    こんな中身になっています。

    WP_User Object
    (
        [data] => stdClass Object
            (
            )
    
        [ID] => 0
        [caps] => Array
            (
            )
    
        [cap_key] => 
        [roles] => Array
            (
            )
    
        [allcaps] => Array
            (
            )
    
        [filter] => 
        [site_id:WP_User:private] => 0
    )
    • このトピックはhiro0502が3ヶ月、 2週前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター Takayuki Miyoshi

    (@takayukister)

    問題のサイトはどこで見られますか? URL を教えてください。

    スレッド開始 hiro0502

    (@hiro0502)

    ご連絡ありがとうございます。
    申し訳ございません、会員制サイトとなるため、該当のページは公開されておりません。
    シンプルにContact Form 7のバージョンを「5.3.2」に戻したら、該当の箇所でwp_get_current_user()が取得できるようになりました。
    ちなみに5.4.2にて、同じ個所でis_user_logged_in()をしてみたらfalseになりました。

    こんにちは

    私の環境では 5.3.2 でもwp_get_current_user()でユーザー情報を取得できません。

    通常、Contact Form 7 は REST API を使ってフォームデータをサーバーに送信しますが、その際に nonce というものを送信しないとユーザー情報が取得できないと思います。

    5.3.2 でも nonce は送信していないのでユーザー情報は取得できないと思います。

    REST API での送信ではなく、通常のフォームの送信であれば取得できます。
    5.3.2 では何かが原因で REST API ではなく通常のフォーム送信が行われているのではないでしょうか?
    参考)https://contactform7.com/ja/why-isnt-my-ajax-contact-form-working-correctly/

    また、明示的に通常のフォーム送信を行いたい場合、wp-config.php に以下のように記述すると良いようです。
    define ('WPCF7_LOAD_JS', false);
    参考)https://contactform7.com/ja/loading-javascript-and-stylesheet-only-when-it-is-necessary/

    プラグインで同様の機能を提供しているものもあります。
    Controls for Contact Form 7 というプラグインで、「Disable AJAX for this form」という機能を有効にすると同様の効果を得られます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。