web-dev-qa-db-ja.com

連絡フォーム7動的テキスト - GETフィールドのプレースホルダー

動的テキストプラグインでContact form 7を使用しています。これは本当にうまく機能します...

ユーザーが商品のリンクをクリックすると、商品名がすでにフィールドに入力された状態で、問い合わせフォームにリダイレクトされるように設定しています。

次のCF7コードを使用して、これはうまく機能します。

<p>[dynamictext enquiry-product "CF7_GET key='product-name'" ]</p>

次のようにして照会フォームにナビゲートします。

http://www.myurl.com/contact-form/?product-name=Product%20Name

しかし、私はプレースホルダーを含めることができるようにショートコードを拡張する方法を考え出しています(時には人々は製品ページからではなくフォームにアクセスするでしょう)そしてまた前にテキストを追加します...

だから、フィールドは言うだろう:

「商品名に関するお問い合わせ」(URLから「商品名」を引き込みます).

そして、彼らが http://www.myurl.com/contact-form から単にそのフォームにたどり着くならば、そのフィールドは単に "Inquiry subject"のプレースホルダーを持つでしょう。

私はもう試した:

<p>[dynamictext enquiry-product "CF7_GET key='product-name'" placeholder "Enquiry Subject"]</p>

私も試してみました:

<p>[dynamictext enquiry-product "Enquiry About CF7_GET key='product-name'"]</p>

そして

<p>[dynamictext enquiry-product "Enquiry About "CF7_GET key='product-name'""]</p>

運がありません….

誰でもこれが可能かどうか知っていますか?そうでなければ、テキストに追加してプレースホルダーを持つことができる一方で、フィールドに製品名を渡すための任意の代替オプション。

ありがとうございます。

1
user2115227

ダイナミックテキストプラグインはあなたが必要とするものを作ることはできませんが、私はあなたがそのように使うことができる新しいタグを書くためにこのコードを使います:

[dynamictext_placeholder enquiry-product placeholder "placeholder text" "CF7_GET key='product-name'" "before '%s' after"]

そのために、それを使って新しいプラグインを作成します。

add_action( 'wpcf7_init', function () {


    wpcf7_add_form_tag(
          array( 'dynamictext_placeholder')
        , 'wpcf7dtx_dynamictext_placeholder_shortcode_handler'
        , true
    );


});


function wpcf7dtx_dynamictext_placeholder_shortcode_handler( $tag ) {


    $tag = new \WPCF7_FormTag( $tag );

    if ( empty( $tag->name ) )
        return '';

    $validation_error = wpcf7_get_validation_error( $tag->name );


    $class = wpcf7_form_controls_class( $tag->type, 'wpcf7dtx-dynamictext' );


    if ( $validation_error )
        $class .= ' wpcf7-not-valid';

    $atts = array();

    $atts['size'] = $tag->get_size_option( '40' );
    $atts['maxlength'] = $tag->get_maxlength_option();
    $atts['minlength'] = $tag->get_minlength_option();

    if ( $atts['maxlength'] && $atts['minlength'] && $atts['maxlength'] < $atts['minlength'] ) {
        unset( $atts['maxlength'], $atts['minlength'] );
    }

    $atts['class'] = $tag->get_class_option( $class );
    $atts['id'] = $tag->get_id_option();
    $atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );


    if ( $tag->has_option( 'readonly' ) )
        $atts['readonly'] = 'readonly';

    if ( $tag->is_required() )
        $atts['aria-required'] = 'true';

    $atts['aria-invalid'] = $validation_error ? 'true' : 'false';


    if ($tag->has_option( 'placeholder' )) {
        $value = $tag->values[1];
    } else {
        $value = (string) reset( $tag->values );
    }

    $value = $tag->get_default_option( $value );

    $value = wpcf7_get_hangover( $tag->name, $value );

    $scval = do_shortcode('['.$value.']');
    if( $scval != '['.$value.']' ){
        $value = esc_attr( $scval );
    }

    $atts['value'] = $value;


    if ("" === $value && $tag->has_option( 'placeholder' )) {

        $atts['placeholder'] = $tag->values[0];

    } elseif (isset($tag->values[2])) {

        $atts['value'] = sprintf($tag->values[2], $atts['value']);

    }


    $atts['type'] = 'text';
    $atts['name'] = $tag->name;

    $atts = wpcf7_format_atts( $atts );


    $html = sprintf(
        '<span class="wpcf7-form-control-wrap %1$s"><input %2$s />%3$s</span>',
        sanitize_html_class( $tag->name ), $atts, $validation_error );

    return $html;

}
1
mmm