サポート » プラグイン » MW WP Form の form要素のaction属性について

  • amazarashi

    (@amazarashi)


    お問い合わせフォームに MW WP Form を使っています。

    とても便利に使わせてもらっているのですが、
    デフォルトでは form 要素の action 属性に値が入りません。

    action 属性に値が入っていなくても、メールが送信されることは確認しているのですが、
    HTML が valid にならないのが気になっております。

    プラグインのソースを見てみると、
    class.form.php の start メソッドに配列を渡してやると、
    デフォルトの設定にマージされて、action 属性を設定することができるようだ、
    ということはわかったのですが、それをどうすれば実現できるのかがわかりません。

    action属性を設定するためのフィルターフックがあったりするのでしょうか?

    どうかお知恵を貸していただけないでしょうか?
    よろしくお願いいたします。

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

    (@colorfullifeinfo)

    こんにちは

    MW_WP_Form_Form::start()$optionsをどうにかする方法は分かりませんでしたが、
    ちょっと強引に、do_shortcode_tag フィルター(WordPress Ver 4.7.0以降)でaction値を書き換えるのではどうでしょうか?

    ※ 下記コードをご利用なさる場合は、ご自身でよく確認してからにしてください。(きちんと動作確認していないです)

    class CLF_Mw_Form_Filter {
    	protected static $instance = null;
    
    	protected function __construct() {
    		add_action( 'mwform_after_exec_shortcode', array($this, 'mwform_after_exec_shortcode') );
    	}
    
    	public static function get_instance() {
    		if ( null === self::$instance ) {
    			self::$instance = new self();
    		}
    		return self::$instance;
    	}
    
    	public function mwform_after_exec_shortcode($form_key) {
    		add_filter('do_shortcode_tag', array($this, 'do_shortcode_tag'), 10, 4);
    	}
    
    	public function do_shortcode_tag($output, $tag, $attr, $m) {
    		if ( 'mwform_formkey' === $tag ) {
    			$action = './';	// action属性値
    			$pattern = '/(<form [^<>]*?)(action="")/';
    			$replacement = '$1action="' . $action . '"';
    			$output = preg_replace($pattern, $replacement, $output);
    		}
    		return $output;
    	}
    
    }
    CLF_Mw_Form_Filter::get_instance();
    トピック投稿者 amazarashi

    (@amazarashi)

    Colorful-life.さん

    わざわざコードを書いていただき、本当にありがとうございます。
    おかげさまでaction属性を設定することができました。
    そのままのコードで、動作確認し、無事メールの送受信もできました。
    HTMLも valid になり、スッキリしました。
    重ね重ね、誠にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「MW WP Form の form要素のaction属性について」には新たに返信することはできません。