WordPress的联系表单7插件的扩展名,我可以隐藏某些表单字段,给定不同的条件(例如"其他"字段,在设置选择选项之前隐藏到"其他")。不幸的是,如果其中一个字段被标记为必需,则会弹出一个错误,说明该字段是必需的,即使用户从未看过该字段!
不幸的是,联系表单7设置了不可逆的字段失效:一旦字段失效,就无法重新验证它,表单提交失败。由于CF7是如此可扩展,我需要一个解决方案,涵盖所有使用CF7验证钩子的验证插件。
remove_filters()不起作用,因为我只希望它应用于一个字段,而不是所有字段。删除过滤器会破坏所有字段的验证,我不希望这样。
有没有办法将一个函数附加到一个钩子上,这个钩子将会中止"中止"该钩子,使它停止处理更多的过滤器函数只适用于apply_filters()的实例?
答案 0 :(得分: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;
}