Saving custom profile fields

时间:2011-05-17 作者:mike23

我正在为特定角色的用户添加一个自定义配置文件字段,如下所示:

function add_custom_profile_fields( $fields ) {

    // get current user ID
    $user = new WP_User( $_GET[\'user_id\'] );

    // get current user role
    if ( !empty( $user->roles ) && is_array( $user->roles ) ) {
        foreach ( $user->roles as $role ) {

            // filter roles
            if ($role == "paying_member"){
               $fields[\'paypal_account\'] = \'Paypal account\';        
            }
         }
     }

    return $fields;
}
add_filter(\'user_contactmethods\',\'add_custom_profile_fields\',10,1);
问题是,字段的值无法保存。当我以管理员身份登录时,我会编辑用户的个人资料。这在某种程度上与我按用户角色过滤这一事实有关,因为当我删除该部分时,值会得到完美保存。

编辑:我想可能整个方法都错了,我要试试this 相反

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

好吧,我做错了,这里有一个可行的解决方案,基于贾斯汀·塔洛克的tutorial.

<?php
/* Add custom profile fields (call in theme : echo $curauth->fieldname;) */ 

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

function my_show_extra_profile_fields( $user ) { ?>

    <?php if(user_can($user->ID, "paying_member")) : ?>

        <h3>Extra profile information</h3>

        <table class="form-table">

            <tr>
                <th><label for="paypal_account">Paypal</label></th>

                <td>
                    <input type="text" name="paypal_account" id="paypal_account" value="<?php echo esc_attr( get_the_author_meta( \'paypal_account\', $user->ID ) ); ?>" class="regular-text" /><br />
                    <span class="description">Please enter your Paypal account.</span>
                </td>
            </tr>

        </table>

    <?php endif; ?>

<?php }

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

function my_save_extra_profile_fields( $user_id ) {

    if ( !current_user_can( \'edit_user\', $user_id ) )
        return false;

    /* Copy and paste this line for additional fields. Make sure to change \'paypal_account\' to the field ID. */
    update_usermeta( $user_id, \'paypal_account\', $_POST[\'paypal_account\'] );
}


?>
他的代码中主要添加了以下代码:

<?php if(user_can($user->ID, "paying_member")) : ?>
它仅为具有“paying\\u member”角色的用户和管理员显示自定义字段。

SO网友:Dave Konopka

您可以跳过角色循环并使用user_can

该函数将功能或角色作为参数。

if (user_can($user->ID, "paying_member")) { 
    $fields[\'paypal_account\'] = \'Paypal account\';
}
可能也值得检查current_user_can 跳过用户查找。

SO网友:Dave Konopka

问题是未填充$\\u GET[\'user\\u id\']。您要拉入当前用户变量。试试这个:

function add_custom_profile_fields( $fields ) {
  global $current_user;
  if user_can($current_user, "paying_member") { 
    $fields[\'paypal_account\'] = \'Paypal account\';
  }
  return $fields;
}

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴