【问题标题】:WP Snippet to hide and prevent users from changing account_display_nameWP Snippet 隐藏和阻止用户更改 account_display_name
【发布时间】:2021-12-04 12:11:09
【问题描述】:

大家晚上好。我试图在网上寻找解决方案,但找不到任何相关的东西。我只需要编写一个 sn-p 来阻止用户通过隐藏“我的帐户”页面中的字段或任何其他更智能的方式来更改他们的显示名称。谢谢

【问题讨论】:

    标签: php wordpress code-snippets


    【解决方案1】:

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

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

    首先,复制 my-account.php 文件

    /wp-content/plugins/woocommerce/templates/myaccount/my-account.php

    到您的子主题文件夹

    /wp-content/themes/your_child_theme/woocommerce/myaccount/my-account.php

    然后打开复制的文件并删除与account_display_name字段相关的html标记和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 代码放入您孩子的主题 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;
        }
    

    【讨论】:

    • 感谢您的回复提摩飞。我进行了更改,但我不得不直接进入 woocommerce 插件文件来编辑与 display_name 行相关的 html 和 php 标记。有什么办法让它也保留在子主题中?
    • @mnrlab 当然可以通过子主题进行模板更改。请仔细阅读我在回答中描述的第 1 步。您需要将 my-account.php 文件复制到子主题文件夹内的 /woocommerce/myaccount/ 文件夹中。更多信息请参考官方Woo template structure docs
    • 哦,对不起,我没有意识到这一步包括插件文件夹!现在绝对有意义!非常感谢
    【解决方案2】:

    感谢您的提问。您可以将此代码插入主题 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 );
    

    【讨论】:

    • 感谢您的回复 Monzur,即使您的解决方案看起来更快,我有一个网站防火墙阻止我激活此 sn-p,所以我会先尝试其他解决方案,如果不工作,我会代替你。
    • 这不好,我可以禁用JS然后编辑它
    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2013-11-20
    • 1970-01-01
    • 2021-04-29
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多