Kullanıcılar profiline nasıl alan eklerim? Örneğin, ülke, yaş vb.


21

Bilgisayarlar / kodlar vb. İle çok iyi değilim. Kayıt formunu çok şey yapan bir eklenti kullanıyorum ve bu formda ülke, yaş grubu, cinsiyet vb. Ekledim. Ben wordpress kullanıcı şey içine kayıt ekleyecek seçeneği tıklayın. Ancak denediğimde, arka uçtaki Kullanıcılar bölümünde yalnızca kullanıcı adı ve e-posta gösterilir. Diğer alanların kullanıcılar bölümünde gösterilmesinin bir yolu var mı?

İstatistiksel kullanım için göstermelerine ihtiyacım var.


5
Lütfen aramamızı deneyin. Düzinelerce örnek bulacaksınız.
fuxia

Yanıtlar:


59

Sen kullanmak gerekir show_user_profile, edit_user_profile, personal_options_update, ve edit_user_profile_updatekancalar.

Kullanıcı bölümüne ek alanlar eklemek için aşağıdaki kodu kullanabilirsiniz

Kullanıcı Düzenle Bölümünde fazladan alan ekleme kodu:

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

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Address"); ?></label></th>
        <td>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your address."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("City"); ?></label></th>
        <td>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your city."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
        <td>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your postal code."); ?></span>
        </td>
    </tr>
    </table>
<?php }

Ek alan ayrıntılarını veritabanına kaydetme kodu :

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

function save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
}

Ayrıca, konuyla ilgili yardımcı olabilecek birkaç blog yayını vardır:


Bravo harika çalışıyor.
AVEbrahimi

1
Bu, DB'deki ekstra alanlarımdan veri depolamıyor. Öneriler lütfen? Teşekkür.
b_dubb

@b_dubb, Lütfen kodunuzu paylaşabilir misiniz? Bu yüzden kontrol edip size bildireceğim.
Arpita Hunka

Sorunumu çözdüm ancak iletişime geçtiğiniz için teşekkür ederiz.
b_dubb

3

Kullanmanız daha iyi get_user_meta(yerine get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}

3

Gelişmiş Özel Alanları Pro eklentisi herhangi bir kodlama olmadan kullanıcı profillerine alanları eklemek için izin verecektir.


3
Sadece pro sürümü
Ben En Aptal Kişi duyuyorum

PHP ile bunu yapmanın ücretsiz yolları vardır.
Johan Pretorius

Evet - kesinlikle bunu ACF olmadan PHP'de kodlamak mümkündür. Benim deneyimim 100 + kod satırı alır ve nonce doğrulama, formun HTML, vb yazma hakkında endişelenmeniz gerekir. ACF kurulum 5-10 dakika kurulum vs birkaç saat sürebilir. Muhtemelen ACF Pro'yu zaten bir projede kullanıp kullanmadığınıza bağlıdır.
squarecandy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.