2016-10-04 2 views
0

WordPress用の連絡フォーム7プラグインの拡張機能があります。選択条件が「その他」に設定されるまで隠されている「その他の」フィールドのような、条件が異なる特定のフォームフィールドを非表示にすることができます。残念ながら、これらのフィールドの1つが必須とマークされていると、ユーザはフィールドを見たことがないにもかかわらず、フィールドが必要であるというエラーがポップアップします。WordPressでフィルターの処理を停止するにはどうすればよいですか?

残念ながら、コンタクトフォーム7は不可逆フィールド無効化で設定されています。一度フィールドが無効化されると、再検証する方法はなく、フォーム送信は失敗します。 CF7は拡張性が高いので、CF7検証フックを使用するすべての検証プラグインを対象とするソリューションが必要です。

remove_filters()は、1つのフィールドにのみ適用したいもので、すべてを適用する必要はないため、機能しません。フィルタを削除すると、すべてのフィールドの検証が壊れてしまいます。私はそれを望んでいません。

このフックを「中止」するフックに関数を付加する方法はありますか?apply_filters()のこのインスタンスのフィルタ関数の処理を停止しますか?

答えて

0

http://blogs.ntm.org/stephen-narwold/2016/10/04/how-to-stop-processing-filters-in-wordpress/の投稿に基づいて、ここで私が思いついたのです。 $wp_filter['this_filter']の内部配列ポインタを最後に設定する必要があります。

add_filters('example_filter', 'my_stop_processing_filters_func', 2); 
function my_stop_processing_filters_func($in) { 
    // Stops filters of this tag from being applied after the current priority level is finished 
    global $wp_filter; 
    if ($in['skip-me']) { 
     // using current_filter() allows one function to be used for multiple filter tags if necessary 
     end($wp_filter[ current_filter() ]); 
    } 

    // never forget to return the filtered variable! 
    return $in; 
} 
関連する問題