web-dev-qa-db-ja.com

異なるユーザー役割によるユーザー・メタの表示

functions.php子テーマにユーザーメタを追加しても問題はありませんが、このデータを "rivenditore"という特定のユーザーロールを持つユーザープロファイル内にのみ表示する必要があります。別のテーブルを表示する

以下は試したコードです。

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

function stel_extra_field_meta( $user )  {
     ?>  

        <h3>STEL Dati Rivenditore</h3>

        <table class="form-table">
            <tr>
                <th><label for="location">Location</label></th>
                <td><input type="text" name="location" value="<?php echo esc_attr(get_the_author_meta( 'location', $user->ID )); ?>" class="regular-text" /></td>
            </tr>
             <tr>
                <th><label for="regione">Regione</label></th>
                <td><input type="text" name="regione" value="<?php echo esc_attr(get_the_author_meta( 'regione', $user->ID )); ?>" class="regular-text" /></td>
            </tr>
             <tr>
                <th><label for="tipo_rivenditore">Tipo di Rivenditore</label></th>
                <td><input type="text" name="tipo_rivenditore" value="<?php echo esc_attr(get_the_author_meta( 'tipo_rivenditore', $user->ID )); ?>" class="regular-text" /></td>
            </tr>

            <tr>
                <th><label for="service_type">Servizio Scelto</label></th>
                <?php $value = esc_attr(get_the_author_meta( 'service_type', $user->ID )); $service_type = preg_replace('/\|.*/', '', $value); ?>
                <td><input type="text" name="service_type" value="<?php echo $service_type; ?>" class="regular-text" /></td>
            </tr>

            <tr>
                <th><label for="phone">Phone</label></th>
                <td><input type="text" name="phone" value="<?php echo esc_attr(get_the_author_meta( 'phone', $user->ID )); ?>" class="regular-text" /></td>
            </tr>
        </table>
    <?php
};


get_the_author_meta( $field, $userID ); 

update_user_meta( $user_id, $meta_key, $meta_value, $prev_value ); 

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

function stel_save_extra_field_meta( $user_id )
{
    update_user_meta( $user_id,'location', $_POST['location']  );
    update_user_meta( $user_id,'service_type',  $_POST['service_type']  );
    update_user_meta( $user_id,'phone',  $_POST['phone']  );
    update_user_meta( $user_id,'regione',  $_POST['regione']  );
    update_user_meta( $user_id,'tipo_rivenditore',  $_POST['tipo_rivenditore']  );
}
1
gnappo

author.phpファイルで、 get_user_meta() を介してユーザーメタデータを取得してから、$user->roles == 'rivenditore' if ステートメントを実行します。必要に応じてメタデータを表示してから、他のロールのユーザーに表示したい内容でelseif $user->roles == 'installatori'ステートメントを実行します。

編集:要求どおりのコード例:

// get author data
$queried_object = get_queried_object();

// set author ID
$author_id = $queried_object->ID;

// get author roles in array
$roles_arr = $queried_object->roles;

// get the meta data, I set it to 'location' just to show you how it works
$user_meta_location = get_user_meta($author_id, 'location', TRUE);

if ($roles_arr[0] == 'rivenditore') {
    // do stuff for rivenditore users
    echo $user_meta_location; 
} elseif ($roles_arr[0] == 'installatori') {
    // do other stuff for installatori users
    echo $user_meta_location; 
}

まだテストしていませんが、うまくいくはずです。あなたのmeta_dataのキーが何なのかわからないので、設定してください。私はコメントを追加したので、すべては確実に読めるはずです。がんばろう!

1