• 解決済 mashico

    (@mashico)


    プロフィール>個人設定で独自項目として、textareaを追加しましたが、管理・author.phpどちらも改行が反映されず、原因が分かりません。

    コードは以下のように書いております。

    function add_user_essay_form( $bool ) {
        global $profileuser;
        if ( preg_match( '/^(profile\.php|user-edit\.php)/', basename( $_SERVER['REQUEST_URI'] ) ) ) {
    ?>
        <tr>
            <th scope="row"><label for="user_essay">紹介文</label><br />500文字程度が目安</th>
                <td>
    				<textarea name="user_essay" rows="5" cols="30" onfocus="this.select()"><?php echo esc_attr( $profileuser->user_essay ); ?></textarea>
                </td>
            </tr>
    <?php
        }
        return $bool;
    }
    add_action( 'show_password_fields', 'add_user_essay_form' );
    
    function update_user_essay( $user_id, $old_user_data ) {
        if ( isset( $_POST['user_essay'] ) && $old_user_data->user_essay != $_POST['user_essay'] ) {
            $user_essay = sanitize_text_field( $_POST['user_essay'] );
            $user_essay = wp_filter_kses( $user_essay );
            $user_essay = _wp_specialchars( $user_essay );
            update_user_meta( $user_id, 'user_essay', $user_essay );
        }
    }
    add_action( 'profile_update', 'update_user_essay', 10, 2 );

    上記は管理画面でのコードとなります。
    データベースを確認した所、DBにも改行が半角スペースに変換されて格納されていました。
    textareaの改行を有効にするにはどうしたらいいのでしょうか。
    どうぞ、ご教授ください。
    よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • redcocker

    (@redcocker)

    こんにちは

    多分、フィルターの当て方が悪いのでしょう。
    つまり、以下の処理です。

    $user_essay = sanitize_text_field( $_POST['user_essay'] );
            $user_essay = wp_filter_kses( $user_essay );
            $user_essay = _wp_specialchars( $user_essay );

    デフォルトでも「プロフィール情報」というテキストエリア項目がありますが、この項目には、wp_filter_ksesしか当たっていないので、(少なくともprofile_updateのタイミングでは)同様にwp_filter_ksesだけでOKではないでしょうか。

    ただし、表示の際にタグなどを無力化するフィルターがないと痛いことなるかもしれませんが。

    wp-includes/user.phpのwp_insert_user($userdata)関数とwp-includes/default-filters.phpが参考になると思います。

    トピック投稿者 mashico

    (@mashico)

    redcocker様

    ご教授いただいたものに少し手を加えたら出来ました!
    最終的なコードは以下になりました。

    function update_user_essay( $user_id, $old_user_data ) {
        if ( isset( $_POST['user_essay'] ) && $old_user_data->user_essay != $_POST['user_essay'] ) {
            $user_essay = wp_filter_kses( $_POST['user_essay'] );
            update_user_meta( $user_id, 'user_essay', $user_essay );
        }
    }
    add_action( 'profile_update', 'update_user_essay', 10, 2 );

    これにて、解決済みとさせていただきます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「個人設定画面に追加したtextareaの改行について」には新たに返信することはできません。