在电子邮件中插入促销代码不起作用

问题描述 投票:0回答:2

有必要确保发送表格时,该人收到专门为其生成的促销代码。问题是,信件到达,促销代码已生成,但促销代码未插入信件中。 WordPress 网站,woocomerce,店面主题,我使用 contact form7 作为表单。这就是我在 function.php 中得出的结论 我的主题:


// Обработка формы после отправки
function process_form_after_submission($contact_form) {
    // Получаем значения из формы
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $posted_data = $submission->get_posted_data();

        // Получаем значение поля "E-mail"
        $email = isset($posted_data['email-504']) ? sanitize_email($posted_data['email-504']) : '';

        // Генерируем уникальный промокод
        $coupon_code = generate_unique_coupon($email);

        if ($coupon_code) {
            // Устанавливаем параметры промокода (ваша дата и сумма могут отличаться)
            $coupon = array(
                'post_title'   => $coupon_code,
                'post_content' => '',
                'post_status'  => 'publish',
                'post_author'  => 1,
                'post_type'    => 'shop_coupon',
                'post_excerpt' => 'Промокод для ' . $email,
            );

            // Создаем промокод
            $new_coupon_id = wp_insert_post($coupon);

            // Устанавливаем сумму скидки и ограничения
            update_post_meta($new_coupon_id, 'discount_type', 'fixed_cart');
            update_post_meta($new_coupon_id, 'coupon_amount', 1000);
            update_post_meta($new_coupon_id, 'individual_use', 'yes');
            update_post_meta($new_coupon_id, 'usage_limit', 1);
            update_post_meta($new_coupon_id, 'expiry_date', strtotime('+1 week'));

            // Сохраняем промокод в сессии для использования в блоке благодарности
            WC()->session->set('generated_coupon', $coupon_code);
        }
    }
}
add_action('wpcf7_mail_sent', 'process_form_after_submission');

// Заменяем шорткод [generated_coupon] на значение из сессии
function replace_generated_coupon_shortcode($content) {
    return str_replace('[generated_coupon]', WC()->session->get('generated_coupon'), $content);
}
add_filter('wpcf7_mail_tag_replaced', 'replace_generated_coupon_shortcode', 10, 3);

// Генерация уникального промокода
function generate_unique_coupon($email) {
    $coupon_code = 'DISCOUNT_' . wp_generate_password(8, false);

    // Дополнительные проверки, чтобы избежать конфликтов
    $existing_coupon = get_page_by_title($coupon_code, OBJECT, 'shop_coupon');
    
    if ($existing_coupon) {
        // Если промокод с таким кодом уже существует, генерируем новый
        return generate_unique_coupon($email);
    }

    return $coupon_code;
}
php wordpress contact-form-7
2个回答
0
投票

您的

wpcf7_mail_sent
处理程序创建优惠券代码并将其设置在会话中,您的
wpcf7_mail_tag_replaced
处理程序从会话中读取并将其替换到电子邮件中。

但是,

wpcf7_mail_tag_replaced
钩子会在
wpcf7_mail_sent
之前触发,因此此时优惠券不会被创建。

您必须在过程中较早触发的钩子中创建帖子/将代码写入会话(我认为

wpcf7_posted_data
可能适合于此)


0
投票
// Обработка формы перед отправкой письма
function process_form_before_send_mail($contact_form) {
    // Проверяем ID формы
    if ($contact_form->id() === 'c310a2d') {
        // Получаем значения из формы
        $submission = WPCF7_Submission::get_instance();
        if ($submission) {
            $posted_data = $submission->get_posted_data();

            // Получаем значение поля "E-mail"
            $email = isset($posted_data['email-504']) ? sanitize_email($posted_data['email-504']) : '';

            // Генерируем уникальный промокод
            $coupon_code = generate_unique_coupon($email);

            if ($coupon_code) {
                // Сохраняем промокод в сессии для использования в блоке благодарности
                WC()->session->set('generated_coupon', $coupon_code);
            }
        }
    }
}
add_action('wpcf7_before_send_mail', 'process_form_before_send_mail');

// Заменяем шорткод [generated_coupon] на значение из сессии
function replace_generated_coupon_shortcode($content, $contact_form, $args) {
    // Проверяем ID формы
    if ($contact_form->id() === 'c310a2d') {
        $coupon_code = WC()->session->get('generated_coupon');

        // Дополнительно, отправляем письмо с промокодом
        $mail_body = str_replace('[generated_coupon]', $coupon_code, $content);
        $mail_subject = $contact_form->title();
        $mail_to = $contact_form->prop('mail')['recipient'];

        wp_mail($mail_to, $mail_subject, $mail_body);

        return $content;
    }
    return $content;
}
add_filter('wpcf7_mail_replace_tags', 'replace_generated_coupon_shortcode', 10, 3);

// Генерация уникального промокода
function generate_unique_coupon($email) {
    $coupon_code = 'DISCOUNT_' . wp_generate_password(8, false);

    // Дополнительные проверки, чтобы избежать конфликтов
    $existing_coupon = wc_get_coupon($coupon_code);
    
    if ($existing_coupon) {
        // Если промокод с таким кодом уже существует, генерируем новый
        return generate_unique_coupon($email);
    }

    // Создаем объект промокода в WooCommerce
    $coupon = new WC_Coupon();
    $coupon->set_code($coupon_code);
    $coupon->set_description('Промокод для ' . $email);
    $coupon->set_discount_type('fixed_cart');
    $coupon->set_amount(1000);
    $coupon->set_individual_use(true);
    $coupon->set_usage_limit(1);
    $coupon->set_expiry_date(strtotime('+1 week'));

    // Сохраняем промокод
    $coupon->save();

    return $coupon_code;
}
© www.soinside.com 2019 - 2024. All rights reserved.