1

すべてのカスタム投稿タイプの投稿を含むフロント エンド ユーザー プロファイルにドロップダウン選択を作成しました。

選択すると、実際には選択が保存されず、最初のオプションに戻るだけです。

どこが間違っていますか?

これは、functions.php ファイルにあるコードです。

add_action( 'personal_options_update', 'save_custom_profile_fields' );
add_action( 'edit_user_profile_update', 'save_custom_profile_fields' );
function save_custom_profile_fields( $user_id ) {
    update_user_meta( $user_id, 'teampage', $_POST['teampage'], get_user_meta( $user_id, 'teampage', true ) );
}

add_action( 'personal_options', 'add_profile_options');
function add_profile_options( $profileuser ) {
    $greeting = get_user_meta($profileuser->ID, 'teampage', true);
    ?><tr>
    <th scope="row">Member of which Health Board?</th>
    <td>
        <select name="teampage" id="teampage" >
            <?php $portfolioloop = new WP_Query( array( 
                'post_type' => 'board', 
                'post_status' => 'publish'
            )); ?>
            <?php while ( $portfolioloop->have_posts() ) : $portfolioloop->the_post(); ?>  
                <option id="Yes" <?php selected( $profileuser->teampage, 'Yes' ); ?>><?php echo the_title(); ?></option> 
            <?php endwhile; wp_reset_query(); wp_reset_postdata(); ?>
        </select>
    </td>
    </tr><?php
}

私はこのチュートリアルを使用しています。

4

1 に答える 1

1

私はあなたの問題が何であるかを知りました。あなたが犯したいくつかの小さな間違いです。作業コードは次のとおりです。

add_action( 'personal_options_update', 'save_custom_profile_fields' );
add_action( 'edit_user_profile_update', 'save_custom_profile_fields' );
function save_custom_profile_fields( $user_id ) {
    update_user_meta( $user_id, 'teampage', $_POST['teampage'], get_user_meta( $user_id, 'teampage', true ) );
}

add_action( 'personal_options', 'add_profile_options');
function add_profile_options( $profileuser ) {
    $greeting = get_user_meta($profileuser->ID, 'teampage', true);
    ?><tr>
    <th scope="row">Member of which Health Board?</th>
    <td>
        <select name="teampage" id="teampage" >
            <?php $portfolioloop = new WP_Query( array( 
                'post_type' => 'board', 
                'post_status' => 'publish'
            ));
            global $post; ?>
            <?php while ( $portfolioloop->have_posts() ) : $portfolioloop->the_post(); ?>  
                <option <?php selected( $profileuser->teampage, $post->ID ); ?> value="<?php echo $post->ID; ?>"><?php echo the_title(); ?></option> 
            <?php endwhile; wp_reset_query(); wp_reset_postdata(); ?>
        </select>
    </td>
    </tr><?php
}

value各 に属性を追加するのを忘れましたoption

また、すべてのオプションに対して同じ値をチェックするべきではありません ( を使用しました。これは、 の値が であるselected( $profileuser->teampage, 'Yes' );かどうかを本質的にチェックします)。代わりに、投稿 ID を各オプションに割り当て、それに対してチェックします。$profileuser->teampageYes

于 2012-11-23T15:55:53.973 に答える