新フィルターフックのメモ
wpcf7_mail_html_body
HTMLメール本文は、これまでWPCF7_AUTOPの定義に関わらずwpcf7_autopでフォーマットされていたが、v5.8からWPCF7_AUTOPの定義が適用されるようになる。
このため、WPCF7_AUTOPをfalse定義して、HTMLメールも利用している場合は要チェック!
→きちんとhtmlで書かずにautpに任せている場合はレイアウト崩れに注意!
変更前(v5.7.7)
./includes/mail.php (v5.7.7)
private function htmlize( $body ) {
...
$html = $header . wpcf7_autop( $body ) . $footer;
⇒本文は自動整形される
...
}
変更後(v5.8)
./includes/mail.php (v5.8)
private function htmlize( $body ) {
...
$body = apply_filters( 'wpcf7_mail_html_body', $body, $this );
⇒自動整形をフィルターフックで制御できる
...
}
WPCF7_AUTOPは、デフォルトtrue。
変更は、wp-config.phpで。
define ('WPCF7_AUTOP', false);
テーマでfalseにする場合は、こちら。
add_filter( 'wpcf7_autop_or_not', '__return_false' );
wpcf7_config_validator_available_error_codes
フォーム構成の検証内容をカスタマイズ(削除)して、構成エラーをなくすことができるようになりました。
現在定義されているエラーコードは次の15。
const error_codes = array(
'maybe_empty',
'invalid_mailbox_syntax',
'email_not_in_site_domain',
'html_in_message',
'multiple_controls_in_label',
'file_not_found',
'unavailable_names',
'invalid_mail_header',
'deprecated_settings',
'file_not_in_content_dir',
'unavailable_html_elements',
'attachments_overweight',
'dots_in_names',
'colons_in_names',
'upload_filesize_overlimit',
);
新しいフィルターフックで必要な検証だけに絞ることができます。
add_filter( 'wpcf7_config_validator_available_error_codes', function( $error_codes, $contact_form ){
$error_codes = array(
...
);
return $error_codes;
}, 10, 2 );
wpcf7_form_additional_atts
formタグに、独自に属性を追加できるようになりました。
add_filter( 'wpcf7_form_additional_atts', function(){
return array( "" => "" );
} );
./includes/contact-form.php
$atts = array(
'action' => esc_url( $url ),
'method' => 'post',
'class' => ( '' !== $class ) ? $class : null,
'id' => ( '' !== $id_attr ) ? $id_attr : null,
'name' => ( '' !== $name_attr ) ? $name_attr : null,
'aria-label' => ( '' !== $title_attr )
? $title_attr : __( 'Contact form', 'contact-form-7' ),
'enctype' => ( '' !== $enctype ) ? $enctype : null,
'autocomplete' => ( '' !== $autocomplete ) ? $autocomplete : null,
'novalidate' => true,
'data-status' => $data_status_attr,
);
$atts += (array) apply_filters( 'wpcf7_form_additional_atts', array() );
$html .= sprintf( '<form %s>', wpcf7_format_atts( $atts ) ) . "\n";
$html .= $this->form_hidden_fields();
$html .= $this->form_elements();
if ( ! $this->responses_count ) {
$html .= $this->form_response_output();
}
$html .= "\n" . '</form>';