在 wordpress 中,我得到了当前经过身份验证的用户的错误自定义字段值

In wordpress, I get wrong custom fields values for current authenticated user

我在用户配置文件上创建了一个用户自定义表单,其中包含两个信息(“Remise”:int 和“modePayement”:string):

    add_action( 'show_user_profile', 'extra_user_profile_fields' );
    add_action( 'edit_user_profile', 'extra_user_profile_fields' );
    
    
    function extra_user_profile_fields( $user ) { 
    $defaultSelectValue = esc_attr( get_the_author_meta( 'modePayement', $user->ID ));
    ?>
    
        <h3><?php _e("Informations client", "blank"); ?></h3>
    
        <table class="form-table">
        <tr>
            <th><label for="remise"><?php _e("Remise"); ?></label></th>
            <td>
                <input type="text" name="remise" id="remise" value="<?php echo esc_attr( get_the_author_meta( 'remise', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description"><?php _e("Entrez le % de remise."); ?></span>
            </td>
        </tr>
        <tr>
            <th><label for="modePayement"><?php _e("Mode de payement"); ?></label></th>
            <td>    
                <select name="modePayement" id="modePayement">
                    <option value="content" <?php if($defaultSelectValue == 'content'){echo("selected");}?>>Content</option>
                    <option value="30 jours" <?php if($defaultSelectValue == '30 jours'){echo("selected");}?>>30 jours</option>
                    <option value="60 jours" <?php if($defaultSelectValue == '60 jours'){echo("selected");}?>>60 jours</option>
                </select>
            </td>
        </tr>
        </table>
    <?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;

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


}

接下来,我创建了一个短代码来在不同页面上显示信息:

function remise_shortCode($atts, $content = null) {
   if (is_user_logged_in() && !is_null($content) && !is_feed() && get_the_author_meta( 'remise' )) {
       $remiseClient =  get_the_author_meta( 'remise', $user->ID ); 
   return '<p id="info_remise_client"> Votre remise est de ' . $remiseClient . '%.</p>';
   }
   return '';
}
add_shortcode('remiseClient', 'remise_shortCode');

function modePayement_shortCode($atts, $content = null) {
   if (is_user_logged_in() && !is_null($content) && !is_feed() && get_the_author_meta( 'remise' )) {
       $modePayementClient =  get_the_author_meta( 'modePayement', $user->ID ); 
   return '<p id="info_modePayement_client"> Mode de payement : ' . $modePayementClient . '.</p>';
   }
   return '';
}
add_shortcode('modePayement', 'modePayement_shortCode');

我可以显示我的个人管理员帐户的信息,但是当我登录其他假冒的CUSTOMER帐户时,显示的信息始终是我的,而不是当前经过身份验证的客户的信息。

在配置文件字段中,两个帐户的值都可以。

你对问题有想法吗? 谢谢

如何在简码中获得 $user->ID$user 对象在哪里?您可以使用 WP get_current_user_id(),它将 return 当前登录的用户 ID。

<?php
add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );
function extra_user_profile_fields( $user ) { 
    $defaultSelectValue = esc_attr( get_the_author_meta( 'modePayement', $user->ID ));
    ?>
    
        <h3><?php _e("Informations client", "blank"); ?></h3>
    
        <table class="form-table">
        <tr>
            <th><label for="remise"><?php _e("Remise"); ?></label></th>
            <td>
                <input type="text" name="remise" id="remise" value="<?php echo esc_attr( get_the_author_meta( 'remise', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description"><?php _e("Entrez le % de remise."); ?></span>
            </td>
        </tr>
        <tr>
            <th><label for="modePayement"><?php _e("Mode de payement"); ?></label></th>
            <td>    
                <select name="modePayement" id="modePayement">
                    <option value="content" <?php if($defaultSelectValue == 'content'){echo("selected");}?>>Content</option>
                    <option value="30 jours" <?php if($defaultSelectValue == '30 jours'){echo("selected");}?>>30 jours</option>
                    <option value="60 jours" <?php if($defaultSelectValue == '60 jours'){echo("selected");}?>>60 jours</option>
                </select>
            </td>
        </tr>
        </table>
    <?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;

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

function remise_shortCode($atts, $content = null) {
   if (is_user_logged_in() && !is_null($content) && !is_feed() && get_the_author_meta( 'remise' )) {
       $remiseClient =  get_the_author_meta( 'remise', get_current_user_id() ); 
   return '<p id="info_remise_client"> Votre remise est de ' . $remiseClient . '%.</p>';
   }
   return '';
}
add_shortcode('remiseClient', 'remise_shortCode');

function modePayement_shortCode($atts, $content = null) {
   if (is_user_logged_in() && !is_null($content) && !is_feed() && get_the_author_meta( 'remise' )) {
       $modePayementClient =  get_the_author_meta( 'modePayement', get_current_user_id() ); 
   return '<p id="info_modePayement_client"> Mode de payement : ' . $modePayementClient . '.</p>';
   }
   return '';
}
add_shortcode('modePayement', 'modePayement_shortCode');
?>