如何在注册和用户配置文件中添加复选框?

时间:2018-05-29 作者:Sasha Grievus

我需要在用户注册和用户配置文件中添加一个隐私策略复选框(在用户生命中的任何时候都可以选中和不选中)。我原以为会有很多插件在做这件事,但我搜索了好几个小时,没有找到任何合适的插件。

我可以找到如何以编程方式将复选框添加到注册表中(如this) 但不在用户配置文件上。那么如何做到这一点呢?

3 个回复
最合适的回答,由SO网友:idpokute 整理而成

要在用户配置文件页面上添加字段,请执行以下操作filters for displaying 他们和一些filters for saving 他们和another action 用于更新个人选项。

SO网友:Sasha Grievus

扩展答案。。。

// Add the checkbox to registration form
add_action( \'register_form\', \'foo_add_privacy_policy_field\' );
function foo_add_privacy_policy_field() { 
  ?>
  <p>
    <input type="checkbox" name="foo_privacy_policy" id="foo_privacy_policy" class="checkbox" style="float: left; height: 50px;" />
    <label for="foo_privacy_policy"><?php _e( \'Privacy Policy\', \'foo\' ) ?>
    </label>
  </p>
  <?php
}

// Validate the checkbox value in the registration form so that it is required
add_filter( \'registration_errors\', \'foo_privacy_policy_auth\', 10, 3 );
function foo_privacy_policy_auth( $errors, $sanitized_user_login, $user_email ) {
  if ( !isset( $_POST[\'foo_privacy_policy\'] ) ) :
    $errors->add( \'policy_error\', "<strong>ERROR</strong>: Please accept the privacy policy." );
    return $errors;
  endif;
  return $errors;
}

// Fill the meta \'foo_privacy_policy\' with the value of the checkbox
add_action( \'personal_options_update\', \'foo_privacy_policy_save\' );
add_action( \'edit_user_profile_update\', \'foo_privacy_policy_save\' );
add_action( \'user_register\', \'foo_privacy_policy_save\' );
function foo_privacy_policy_save( $user_id ) {
  if ( isset( $_POST[\'foo_privacy_policy\'] ) ){
    update_user_meta( $user_id, \'foo_privacy_policy\', $_POST[\'foo_privacy_policy\'] );
  }else{
    update_user_meta( $user_id, \'foo_privacy_policy\', \'off\' );
  }
}

// Add the checkbox to user profile home
add_action( \'show_user_profile\', \'foo_show_extra_profile_fields\' );
add_action( \'edit_user_profile\', \'foo_show_extra_profile_fields\' );
function foo_show_extra_profile_fields( $user ) {
    ?>
    <h3><?php esc_html_e( \'Privacy Policy\', \'foo\' ); ?></h3>

    <table class="form-table">
        <tr>
            <td>
            <input type="checkbox" name="foo_privacy_policy" id="foo_privacy_policy" class="checkbox" style="float: left; height: 50px;" <?php if(get_the_author_meta(\'foo_privacy_policy\', $user->ID)==\'on\' ){ echo "checked"; } ?> />
    <label for="foo_privacy_policy"><?php _e( \'Privacy Policy\', \'foo\' ) ?>
    </label></td>
        </tr>
    </table>
    <?php
}

SO网友:Krishna
add_action( \'woocommerce_register_form\', \'add_registration_privacy_policy\', 11 );
function add_registration_privacy_policy() {
    woocommerce_form_field( \'privacy_policy_reg\', array(
        \'type\'          => \'checkbox\',
        \'class\'         => array(\'form-row privacy\'),
        \'label_class\'   => array(\'woocommerce-form__label woocommerce-form__label-for-checkbox checkbox\'),
        \'input_class\'   => array(\'woocommerce-form__input woocommerce-form__input-checkbox input-checkbox\'),
        \'required\'      => true,
        \'label\'         => \'I\\\'ve read and accept the <a href="/privacy-policy">Privacy Policy</a>\',
    ));
}

add_filter( \'woocommerce_registration_errors\', \'validate_privacy_registration\', 10, 3 );
function validate_privacy_registration( $errors, $username, $email ) {
    if ( ! is_checkout() ) {
        if ( ! (int) isset( $_POST[\'privacy_policy_reg\'] ) ) {
            $errors->add( \'privacy_policy_reg_error\', __( \'Privacy Policy consent is required!\', \'woocommerce\' ) );
        }
    }
    return $errors;
}
结束

相关推荐

Client Profiles

正在寻找创建客户机数据库的最佳方法。插件能最好地实现以下功能吗?我的客户端数据库插件存储有关客户端的个人信息和统计信息,这些信息和统计信息将通过自定义字段和自定义表单收集,管理员创建客户端配置文件后,仪表板选项卡将打开列表区域(类似于用户选项卡)(仅限管理员)“添加新”功能(类似于仪表板的用户区域)。管理员可以将客户端分配给用户,分配给用户的客户端显示为用户元数据。分配给用户的客户端将在用户配置文件中可见,仪表板小部件显示为登录用户分配的客户端,并带有指向客户端配置文件页面的链接。插件是解决此问题的解决方