WP_USERMETA-从数据库读取,但SAVE函数中断

时间:2015-10-07 作者:theHubi

我在WordPress用户的配置文件页面中添加了一个名为“uidnumber”的自定义字段,它可以很好地读取数据库中的值,但它不保存任何内容。

wp_usermeta table

如果可以的话,我宁愿将其保存在wp\\u用户中,因为整个表都非常清楚,但是据我所知,WordPress更新可能会删除自定义列。

这是我的functions.php:

add_action( \'personal_options_update\', \'save_extra_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_extra_profile_fields\' );

function save_extra_profile_fields( $user_id )
{
    update_user_meta( $user_id,\'uidnumber\', sanitize_text_field( $_POST[\'uidnumber\'] ) );
}
这里是字段本身:

<p class="form-row form-row-wide">
                <label for="uidnumber"><?php _e( \'UID-Nummer\', \'woocommerce\' ); ?></label>
                <input type="text" class="input-text" name="uidnumber" id="uidnumber" value="<?php echo esc_attr( $user->uidnumber); ?>" />
            </p>
我不知道为什么它不能保存这个字段,而另一个字段我编码到“contact_methods“,很有魅力。

edit01:

我试过了你告诉我的,除非我把它放错地方,否则还是没法保存。

<p class="form-row form-row-wide">
                <label for="uidnumber"><?php _e( \'UID-Nummer\', \'woocommerce\' ); ?></label>
                <input type="text" class="input-text" name="uidnumber" id="uidnumber" value="<?php echo get_user_meta( $user->ID, \'uidnumber\', true ); ?>" />
            </p>
还是你想把它放在我的保存功能中?(正如你提到的价值,我假设不是这样)

edit02: 我认为我的主要问题是,在我的情况下,您在“show”函数中指定的内容实际上在另一个文件中:form-edit-account.php所以我不能只使用“show\\u extra\\u profile\\u fields”功能。

Also one thing that seems to be misunderstood: 我希望用户(WordPress上的普通用户)能够添加自己的文本。这是我这么做的唯一原因。就个人而言,我可以在后端添加一个UID号码。然而,这意味着我必须自己找出每个用户的UID。

edit03:

functions.php - 这里只有最后几行是实际相关的。

form-edit-account.php

1 个回复
SO网友:Webloper

你还没有提供完整的代码,所以不知道你错在哪里,这个脚本对我来说很好。

add_action( \'personal_options_update\', \'save_extra_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_extra_profile_fields\' );

function save_extra_profile_fields( $user_id )
{
    if ( current_user_can(\'edit_user\',$user_id) )
        update_user_meta($user_id, \'uidnumber\', sanitize_text_field($_POST[\'uidnumber\']));
}

add_action(\'show_user_profile\', \'show_extra_profile_fields\');
add_action(\'edit_user_profile\', \'show_extra_profile_fields\');

function show_extra_profile_fields( $user )
{
    ?>
        <p class="form-row form-row-wide">
            <label for="uidnumber"><?php _e( \'UID-Nummer\', \'woocommerce\' ); ?></label>
            <input type="text" class="input-text" name="uidnumber" id="uidnumber" value="<?php echo get_user_meta( $user->ID, \'uidnumber\', true ); ?>" />
        </p>
    <?php
}

EDIT : For frontend code

您必须通过以下方式保存uidnumberupdate_user_meta 这是代码

global $user;

$user = wp_get_current_user();

if ( $_POST )   {

    update_user_meta( $user->ID, \'uidnumber\', sanitize_text_field($_POST[\'uidnumber\']) );
}
编辑2:personal_options_update 操作仅在管理部分有效,您必须将该代码放入前端检查pastebin

enter image description here

  1. sanitize_text_field
  2. show_user_profile
  3. edit_user_profile
  4. personal_options_update
  5. edit_user_profile_update

相关推荐

将MySQL转换为WordPress$WPDB

我正在从3.7升级一个古老的Wordpress网站。它有一些SQL查询请求,在3.9以上版本之后无法运行,您现在必须通过$WPDB连接到DB(https://codex.wordpress.org/Class_Reference/wpdb). 我对此进行了初步尝试,但挂断了mysql\\u fetch\\u array部分的连接,也不清楚我所做的是否正确。mysql\\u fetch\\u数组似乎需要使用get\\u结果(https://developer.wordpress.org/reference/