用于隐藏和防止用户更改的 WP 代码段 account_display_name

WP Snippet to hide and prevent users from changing account_display_name

大家晚上好。我试图环顾网络以找到解决此问题的方法,但实际上找不到任何相关内容。我只需要编写一个片段,通过隐藏“我的帐户”页面中的字段或任何其他可能的更智能的方式来防止用户更改他们的显示名称。谢谢

感谢您的提问。您可以将此代码插入您的主题 functions.php 或使用 Code Snippets 插件。希望它能奏效。

function wp_disable_display_name() {
    global $pagenow;
    if ( $pagenow == 'profile.php' ) {
    ?>
        <script>
            jQuery( document ).ready(function() {
                jQuery('#display_name').prop('disabled', 'disabled');
            });
        </script>
    <?php
    }
}
add_action( 'admin_head', 'wp_disable_display_name', 15 );

根据您的问题,我可以假设您正在使用 WooCommerce。你需要做几件事来实现它:

  1. 我的帐户模板文件中删除account_display_name字段:

首先,复制form-edit-account.php文件

/wp-content/plugins/woocommerce/templates/myaccount/form-edit-account.php

到您的 child 主题文件夹

/wp-content/themes/your_child_theme/woocommerce/myaccount/form-edit-account.php

然后打开复制的文件并删除 html 标记和与 account_display_name 字段相关的 php 代码:

    <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="account_display_name"><?php esc_html_e( 'Display name', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
    <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_display_name" id="account_display_name" value="<?php echo esc_attr( $user->display_name ); ?>" />
    <span><em><?php esc_html_e( 'This will be how your name will be displayed in the account section and in reviews', 'woocommerce' ); ?></em></span>
    </p>
    <div class="clear"></div>
  1. 使用 woocommerce_save_account_details_required_fields 挂钩从必填字段中取消设置 account_display_name 字段。这是必要的,以避免在“我的帐户”页面上保存更改时出现验证错误。

将以下 php 代码放入您的 child 的主题 functions.php 文件中:

    add_filter('woocommerce_save_account_details_required_fields', 'remove_required_fields'); 
    function remove_required_fields( $required_fields ) {
        unset($required_fields['account_display_name']);
        return $required_fields;
    }