wordpresscustom-fieldsuser-accounts

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


I have created a user custom form on user profiles, with two information fields ("Remise": int and "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'] );
}


}

Next, I have created a short code to display informations on different pages :

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');

I can display the information of my personal admin account, but when I login on an other CUSTOMER fake account, the displayed values are always mine, and not the information of the current authenticated customer.

On the profile fields, the values are ok for both accounts.

Do you have an idea of ​​the problem?


Solution

  • How do you get $user->ID in your shortcode? where is $user object? You can use WP get_current_user_id() that will return current logged in user 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');
    ?>