サポート » 使い方全般 » placeholderに「<」を入力するとget_field_name()が正常に動作しない

  • 解決済 msthings

    (@msthings)


    WP_Widgetクラスを継承してカスタムウィジェットを作っています。

    public function form()の中で下記コードを書くとtextareaの内容が保存されません。(2回トライすると2回目にはきちんと保存されます。)

    <label for="<?php echo $this->get_field_id( 'text' ); ?>">タグ:</label>
    <textarea class="widefat" rows="13" cols="20" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" placeholder="<div ..." ><?php echo ( $text ); ?></textarea>

    デベロッパーコンソールからhtmlを見てみると下記のようになっていました。

    <label for="widget-test_tag-2-text">タグ:</label>
    <textarea class="widefat" rows="13" cols="20" id="widget-test_tag-__i__-text" name="widget-test_tag[__i__][text]" placeholder="<div ..."></textarea>

    $numberが正常に取得できていないようです。

    placeholderのタグの「<」を取り除くと正常に動作しました。

    これはバグでしょうか?

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • < の代わりに &lt; を入れてはどうでしょう?

    トピック投稿者 msthings

    (@msthings)

    回答ありがとうございます。
    & l t ;を入れてみましたが結果は変わりませんでした。。。(なぜか変換されてしまったので半角スペースを入れていますm(_ _)m)

    まだ原因が特定できませんけれど、placeholder の文字列(divタグのようですが)を省略せず見せていただくことはできますか?

    トピック投稿者 msthings

    (@msthings)

    返信ありがとうございます。
    特に省略はしておらずplaceholderには「<div …」しか書いていないんですよ(汗

    状況を確かめるだけですが
    placeholder="<div ..."placeholder="&lt;div ..." の2つはダメで
    placeholder="div ..." なら大丈夫、でしょうか?

    トピック投稿者 msthings

    (@msthings)

    はい、仰る通りです。
    ちなみにplaceholder="<"placeholder="& l t ;"でもダメでした。

    まだ原因はわかりませんが、このコードだとどうでしょう?

    <?php $phstr1 = '<div ...'; ?>
    <label for="<?php echo $this->get_field_id( 'text' ); ?>">タグ:</label>
    <textarea class="widefat" rows="13" cols="20" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>" placeholder="<?php echo $phstr1; ?>" ><?php echo ( $text ); ?></textarea>
    
    トピック投稿者 msthings

    (@msthings)

    なるほど、1回変数に入れるんですね。
    今試してみたのですが、やっぱりダメでした。。。

    > $numberが正常に取得できていないようです。

    とある $number が示されたコード内ないので、これはどのように取得されているのでしょうか。
    もしかしたら、そのあたりのコードと関連性があるのかっもしれません。

    トピック投稿者 msthings

    (@msthings)

    ご返信ありがとうございます。
    $numberに付きましては/wp-includes/class-wp-widget.phpにあります。
    このクラス内で$numberが正常に取得できないと”__i__”を返すようです。

    似たバグ ( @msthings さんと同じ内容か確かめていません) が本家のチケットに登録されていますが、ほかのバグと重複しているとの印がついており、終了になっています。
    Input field with HTML tag as default value
    https://core.trac.wordpress.org/ticket/30351

    チケットが生きている方は下記ですが、3年前から対応がストップしています。重要と思う人 (手をつける人) がいないようです。

    Widget removes fields w/ default HTML on initial save in IE8 and 9
    https://core.trac.wordpress.org/ticket/18446

    トピック投稿者 msthings

    (@msthings)

    gblsmさん

    お調べしていただき、ありがとうございます。
    該当のURLを見ましたが、inputのデフォルトvalueにタグを入力すると”__i__”が返ってくる、というような内容っぽいですね。
    上記の工程を今試してみましたが同じ症状が見られたので僕の症状とかなり似ています。

    必ずタグを入れなければならないという状況ではありませんので、
    ひとまず「<div …」ではなく「divタグ」という風に対応したいと思います。
    ありがとうございました!

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「placeholderに「<」を入力するとget_field_name()が正常に動作しない」には新たに返信することはできません。