Я использую контактную форму 7 для загрузки двух разных форм на страницу, а затем, помимо отправки электронного письма, динамически добавляю эту информацию в базу данных. К сожалению, из-за плагина я не могу просто создать все входы с разными именами, чтобы избежать необходимости в фильтре. Итак, по сути, я хотел бы вставить идентификатор формы в ловушку действия и динамически создать переменную $ data, основанную на том, какая форма отправляется, но я не уверен, как получить идентификатор формы cf7. Кто-нибудь знает, как сделать это, или, возможно, более выполнимый способ сделать это?
Форма Шорткоды
[contact-form-7 id="221" title="Reg 1"] [contact-form-7 id="112" title="Reg 2"]
PHP Action Hook в functions.php
function save_form( $wpcf7 ) {
global $wpdb;
$form_to_DB = WPCF7_Submission::get_instance();
if($form_to_DB) {
$formData = $form_to_DB->get_posted_data();
}
if("Request a Free Demo" != $formData['demo_request'][0]){
$freeDemo = "yes";}else { $freeDemo = "nope";}
if(THE FORM ID = 221) {
$data = array(
some values from the 112 form
$wpdb->insert( $wpdb->prefix . 'registrations', $data );
);
}elseif(THE FORM ID = 112) {
$data = array(
some other values from the 112 form
$wpdb->insert( $wpdb->prefix . 'registrations_2', $data );
);
}
}
remove_all_filters('wpcf7_before_send_mail');
add_action('wpcf7_before_send_mail', 'save_form' );
Я склонен использовать ловушку действия «wpcf7_posted_data» (хотя это могло измениться, так как вопрос уже устарел). Вам не нужно удалять все фильтры.
Например:
function processForm($cf7) {
$wpcf7 = WPCF7_ContactForm::get_current();
if($wpcf7->id == 221) {
//Do Stuff
}
elseif($wpcf7->id == 112) {
//Do different stuff
}
}
add_action("wpcf7_posted_data", "processForm");
просто используйте это:
function save_form( $wpcf7 ) {
if($wpcf7->id == 4711) {
// whatever
}
}
РЕШИТЬ:
Я просто использовал логический оператор, чтобы проверить, было ли поле, специфичное для формы, пустым или нет. Если поле «form_2_name» было пустым при отправке формы, то мы знаем, что форма 1 отправляется. Простое, если утверждение с этой логикой добилось цели!
$wpcf7->id
больше не доступен, используйте $wpcf7->id()
вместо.