添加新字段以编辑用户页面

时间:2017-06-19 13:17:57

标签: php wordpress

我正在尝试向用户编辑页面添加新字段,但我收到此错误

  

注意:类WP_User的对象无法转换为int in   第49行的C:\ xampp \ htdocs \ wordpress \ wp-includes \ capabilities.php

这是我用于函数的代码,

    static function my_extra_user_fields( $user_id ) {
        echo $user_id->ID;
    $user_meta = get_user_meta($user_id);
     if (!empty ($user_meta['_is_post_agent'][0])) {
     $check_true = $user_meta['_is_post_agent'][0]; 
         }
     else { 
         $check_true="false"; 
         }
     ?>
        <h3>Agent Author</h3>

        <table class="form-table">
            <tr>
                <th><label for="agent_author">Agent Author</label></th>
                <td>

                    <input type="checkbox" name="agent_author" value="is_author_agent"  <?php if($check_true == 'true') echo 'checked="checked"';?> >

                </td>
            </tr>
        </table>
    <?php }



    static function save_my_extra_user_fields( $user_id ) {

        if ( !current_user_can( 'edit_user', $user_id ) ) { 

               return false;

     }else{

            if(isset($_POST['agent_author']) && $_POST['agent_author'] == true) {

             update_user_meta( $user_id, '_is_post_agent', 'true');
                }
                elseif(isset($_POST['agent_author']) && $_POST['agent_author'] == false) {

                    update_user_meta( $user_id, '_is_post_agent', 'false');
                }
                     }
                         }

对于我在这里做错了什么,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

get_user_meta()期望第一个参数是一个整数(或者可以转换为整数的东西。如果该参数不能转换为整数,则会得到该错误。

尝试将上面的第3行切换为:

$user_meta = get_user_meta($user_id->ID);

根据the Wordpress documentation,它期望是一个整数。

答案 1 :(得分:0)

这是向用户编辑屏幕添加复选框字段“代理作者”的正确方法:

add_action( 'show_user_profile', 'brg_agent_author_field' );
add_action( 'edit_user_profile', 'brg_agent_author_field' );

function brg_agent_author_field( $user ) { 
    $is_agent = get_the_author_meta( 'agent_author', $user->ID ); 
    ?>

    <h3>Agent Author</h3>

    <table class="form-table">

        <tr>
            <th><label for="agent_author">Agent Author</label></th>
                <td>
                    <input type="checkbox" name="agent_author" <?php if ($is_agent) echo 'checked="checked"'; ?>>
                </td>
        </tr>

    </table>
<?php }

这就是你如何拯救它:

add_action( 'personal_options_update', 'brg_save_agent_author_field' );
add_action( 'edit_user_profile_update', 'brg_save_agent_author_field' );

function brg_save_agent_author_field( $user_id ) {

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

    update_usermeta( $user_id, 'agent_author', $_POST['agent_author'] );
}

最简单的方法是将此代码添加到主题functions.php