在WooCommrece注册页面上添加新闻通讯订阅复选框

时间:2019-05-10 06:36:21

标签: wordpress woocommerce sendgrid

我正在使用SendGrid插件,该插件允许创建新闻通讯订阅表单,该表单将发送电子邮件通知以订阅新闻通讯(https://sendgrid.com/docs/for-developers/sending-email/wordpress-subscription-widget/)。

我希望新用户注册后,他们可以选择通过注册页面(http://prntscr.com/nmq8h2)上的复选框来订阅新闻通讯。

2 个答案:

答案 0 :(得分:2)

SendGrid插件已经不再维护了一段时间(因此看起来确实已经过时了)。

已更新:现在要在Woocommerce注册表单(以及“我的帐户”>“帐户详细信息”部分)中添加新闻订阅的复选框,您将使用以下内容:

// Remove "(optional)" label for this checkbox
add_filter( 'woocommerce_form_field' , 'remove_optional_custom_field_label', 10, 4 );
function remove_optional_custom_field_label( $field, $key, $args, $value ) {
    if( 'receive_newsletter' === $key && is_wc_endpoint_url( 'edit-account' ) ) {
        $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
        $field = str_replace( $optional, '', $field );
    }
    return $field;
}

// Display a custom checkbox in My Account > Account details
add_action( 'woocommerce_register_form', 'add_account_newsletter_checkbox_field' );
add_action( 'woocommerce_edit_account_form', 'add_account_newsletter_checkbox_field' );
function add_account_newsletter_checkbox_field() {
    woocommerce_form_field( 'receive_newsletter', array(
        'type'  => 'checkbox',
        'class' => array('form-row-wide'),
        'label' => __( 'Subscribe to our newsletter?', 'woocommerce' ),
        'clear' => true,
    ), get_user_meta(get_current_user_id(), 'receive_newsletter', true ) );

}


// Save registration checkbox field value
add_action( 'woocommerce_created_customer', 'save_account_registration_field' );
function save_account_registration_field( $customer_id ) {
    $value = isset( $_POST['receive_newsletter'] ) ? '1' : '0';
    update_user_meta( $customer_id, 'receive_newsletter', $value );

}

// Save checkbox field value for My Account > Account details
add_action( 'woocommerce_save_account_details', 'save_account_details_newsletter_checkbox_field', 10, 1 );
function save_account_details_newsletter_checkbox_field( $user_id ) {
    $value = isset( $_POST['receive_newsletter'] ) ? '1' : '0';
    update_user_meta( $user_id, 'receive_newsletter', $value );
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。


1)在WooCommerce注册表格上:

enter image description here

2)在我的帐户上>帐户详细信息(部分)

enter image description here

  

现在,由于您的插件已过时,并且由于当时StackOverFlow上的规则是一个问题,因此您将不得不处理Sendgrid Newsletter集成(因为它的范围太广了)。 >

答案 1 :(得分:0)

我真的不明白您的要求。但我确实有几件事可以为您指明正确的方向。

  1. 您的jQuery应该在使用wp_enqueue_script加载的自己文件中
  2. 检查用户是否使用is_user_logged_in登录
  3. 使用wp_localize_script将该状态传递给JS
  4. 您现在可以在JS变量中获得登录状态。