web-dev-qa-db-ja.com

ユーザープロフィールページのドロップダウンリスト

これに対する答えを見つけるのに問題があります。カスタムユーザーメタフィールドが必要です。

私はそれらを作成することができます大丈夫ですが、私はドロップダウンを作成する必要があります。

たとえば、ユーザーmetaをUnit typeにし、ドロップダウン値をResidentialおよびCommercialにするとします。

これに関するどんな助けでも素晴らしいでしょう。ありがとう。

2
Fraggy

ありがとう。コードの最初の部分でエラーが発生したので、ちょっとした微調整が1つだけです。以下は、コードの最初のブロックの作業コードです。

//hooks
add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>

<h3>Extra fields</h3>
<table class="form-table">
    <tr>
        <th><label for="text">text</label></th>
        <td>
            <?php 
            // get test saved value
            $saved = esc_attr( get_the_author_meta( 'user_text', $user->ID ) );
            ?>
            <input type="text" name="user_text" id="user_text" value="<?php echo $saved; ?>" class="regular-text" /><br />
            <span class="description">Simple text field</span>
        </td>
    </tr>

    <tr>
        <th><label for="dropdown">dropdown Select field</label></th>
        <td>
            <?php 
            //get dropdown saved value
            $selected = get_the_author_meta( 'user_select', $user->ID ); //there was an extra ) here that was not needed 
            ?>
            <select name="user_select" id="user_select">
                <option value="value1" <?php echo ($selected == "value1")?  'selected="selected"' : '' ?>>Value One label</option>
                <option value="value2" <?php echo ($selected == "value2")?  'selected="selected"' : '' ?>>Value Two label</option>
</select>


            <span class="description">Simple text field</span>
        </td>
    </tr>
</table>

第二部は大丈夫です。

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

function save_user_fields( $user_id ) {

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

//save text field
update_usermeta( $user_id, 'user_text', $_POST['user_text'] );

//save dropdown
update_usermeta( $user_id, 'user_select', $_POST['user_select'] );
}
3
Fraggy

テキストフィールドを追加する方法を知っていれば、他のフォームフィールドを追加する方法がわかります。

フィールドを表示します。

//hooks
add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>

    <h3>Extra fields</h3>
    <table class="form-table">
        <tr>
            <th><label for="text">text</label></th>
            <td>
                <?php 
                // get test saved value
                $saved = esc_attr( get_the_author_meta( 'user_text', $user->ID ) );
                ?>
                <input type="text" name="user_text" id="user_text" value="<?php echo $saved; ?>" class="regular-text" /><br />
                <span class="description">Simple text field</span>
            </td>
        </tr>

        <tr>
            <th><label for="dropdown">dropdown Select field</label></th>
            <td>
                <?php 
                //get dropdown saved value
                $selected = get_the_author_meta( 'user_select', $user->ID ) ); 
                ?>
                <select name="user_select" id="user_select">
                    <option value="value1" <?php echo ($selected == "value1")?  'selected="selected"' : '' ?>>Value One label</option>
                    <option value="value2" <?php echo ($selected == "value2")?  'selected="selected"' : '' ?>>Value Two label</option>

                <span class="description">Simple text field</span>
            </td>
        </tr>
    </table>
<?php }

フィールドを保存する

//フック

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

function save_user_fields( $user_id ) {

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

    //save text field
    update_usermeta( $user_id, 'user_text', $_POST['user_text'] );

    //save dropdown
    update_usermeta( $user_id, 'user_select', $_POST['user_select'] );
}

どちらの場合も、データをデータベースに格納し、それがどのような種類のフィールドであってもデータベースから取得するために同じ関数を使用していることがわかります。

1
Bainternet

テーマのfunction.phpに追加してください

add_action( 'show_user_profile', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );
function Add_user_fields( $user ) { ?>
    <table class="form-table">
        <tr>
            <th><label for="dropdown">Activate/Deactivate User</label></th>
            <td>
                <?php 
                //get dropdown saved value
                $selected = get_the_author_meta('pmpro_email_confirmation_key', $user->ID); //there was an extra ) here that was not needed 
                ?>
                <select name="user_select" id="user_select">
                    <option value="validated" <?php echo ($selected == "validated")?  'selected="selected"' : '' ?>>Activate</option>
                    <option value="notvalidated" <?php echo ($selected == "notvalidated")?  'selected="selected"' : '' ?>>De-Activate</option>
                </select>
            </td>
        </tr>
    </table>
<?php } 

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

function save_user_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ){
        return false;
    }
    //save dropdown
    update_usermeta( $user_id, 'pmpro_email_confirmation_key', $_POST['user_select'] );
    }
?>
0
narinder kumar