2011-05-26 8 views
6

için yeni usermeta alanı oluşturma?Wordpress: Ben seçim değerler açılır bir yeni usermeta alan yaratabilirim kullanıcılar

Im istediğim yeni özel alanın belli bir değere sahip tüm kullanıcılar için koşullu deyimi oluşturmak istiyorum. yeni alan olacak

Örneğin

: değerlerle açılır Onaylı şunlardır: Evet ve Hayır

koşullu önerme Yes Onaylı saha değerine sahip tüm kullanıcılara tanıyacaktır. Sonra bir kod yazacak.

Im tam olarak neye ihtiyacım yok wp_get_current_user fonksiyonu() ile çalışan, ama sadece yeni bir özel usermeta alanını gerekir. Örnekte, yeni usermeta alanı "artwork_approved" olacaktır.

Örnek:

wp_get_current_user(); 
if ($current_user->artwork_approved == 'Yes'){ 
    echo 'Thank you for approving your artwork!'; 
} 

bunun için hiçbir eklenti gibi görünüyor ve gerçekten bu özelliğe ihtiyaç . Gerçekten seçenekleri açılan yeni bir usermeta oluşturma konusunda bazı tavsiyeler takdir ediyorum.

* GÜNCELLEME: "Artwork Onaylı" Ben adlı yeni usermeta alanını oluşturmak için Kayıt Plus Redux kullanılan

"Hayır" ve "Evet" seçenekleriyle bir açılır menü yaptım. Hayır seçeneği varsayılan olarak ayarlanmıştır.

"Artwork Approved" usermeta alanı yaratıldı. Ben kullanıcı hesaplarını yönetmek ve seçim Evet veya bu yeni usermeta alanla Şimdi sayılı, Im geçerli kullanıcı Evet değeriyle Onaylı Artwork olup olmadığını kontrol etmelidir bir işlev. Sonra belli bir kodu göstermesi gerekiyor.

<?php global $current_user; get_currentuserinfo(); if ($current_user->artwork_approved == 'Yes') { ?> 

echo 'Your artwork is approved'; 

<?php } else { ?>   

echo 'Your artwork is not approved'; 

<?php } ?> 

Ama ne oluyor o takdirde ifadenin ilk bölümü tanıyan yer etmedi: deyim Im yeni usermeta alanıyla kullanılıyorsa

burasıdır. Ben onaylı sanat eserleri ile herhangi hesaba giriş varsa, eğer deyim sadece ben Onaylı Artwork seçeneğini "Evet" olsa bile "başka" bölümünü gösterir.

Bildirimde, Evet Seçeneğini neden kabul etmediğini bilmiyorum.

Teşekkür

cevap

16

Kullanıcı profili eylemler içine kanca ve yeni bir alan eklemek için basit eklenti oluşturabilir.

Alanı forma eklemek için show_user_profile ve edit_user_profile eylemlerine bağlanarak form alanı HTML'sini çıktı alabilirsiniz. Aşağıdakiler açılır listeden ziyade bir onay kutusu kullanır.

add_action('show_user_profile', 'my_user_profile_edit_action'); 
add_action('edit_user_profile', 'my_user_profile_edit_action'); 
function my_user_profile_edit_action($user) { 
    $checked = (isset($user->artwork_approved) && $user->artwork_approved) ? ' checked="checked"' : ''; 
?> 
    <h3>Other</h3> 
    <label for="artwork_approved"> 
    <input name="artwork_approved" type="checkbox" id="artwork_approved" value="1"<?php echo $checked; ?>> 
    Artwork approved 
    </label> 
<?php 
} 

Sonra, personal_options_update ve edit_user_profile_update eylemler içine kanca senin alanın değerini almak ve kullanıcı meta olarak kaydetmek gerekir. ( ).

if (get_user_meta($current_user->ID, 'artwork_approved', true)) { 
+0

Teşekkürler Richard. Biraz işe yarayan bir çözüm buldum ... Yeni usermeta'yı yaratabilen Register Plus Redux eklentisini kullanıyorum. Gönderiyi daha fazla bilgi ile güncelledim. Girdiğin için minnettar olurum. Çok teşekkürler! – gdinari

+0

Teşekkürler Richard çözümünüz bir çekicilik gibi çalıştı. Gördüğüm tek sorun, yönetici bölümünde kullanıcı onayı için kutuyu işaretlediğimde, sayfayı güncelleştirdikten sonra kutunun işaretli olmamasıdır. Eğer personelimizden biri bu müşteriye bakarsa, onaylanıp onaylanmadıklarını bilmezlerdi. Bu yüzden kutunun işaretini kaldırmak (onaylamamak) isteseydim bunu nasıl yaparım? Teşekkürler – gdinari

+0

Bunu önerdiğim gibi bir eklenti olarak oluşturmanız gerekir ... Onay için fotoğraf yüklediğim yönetici üyeleri php sayfasına bana verdiğiniz ilk kod bloğunu ekledim. Müşterilerin göreceği web sitesinin ön ve son ucuna eklediğim ikinci ve son blok. veritabanına baktıktan sonra "artwork_approved." Doğru bir şekilde kayıt olmadığım için db'ye girilmediğini tahmin ediyorum. – gdinari

1

Kodun ikinci bloğu okumak gerekmiyor:

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', $_POST['artwork_approved']); 
} 

update_user_meta tarafından kaydedilen değer $_POST['artwork_approved'] değil isset($_POST['artwork_approved']) olduğunu.

+0

İyi bir nokta olsa da, verileri şu şekilde dezenfekte etmeyi öneririm: 'update_user_meta ($ user_id, 'artwork_approved', isset ($ _ POST ['artwork_approved'])? 1: 0); – helgatheviking

+1

'artwork_approved' onay kutusu kullanıyor İşaretlenmemişse $ _POST dizisinde görünmez. –

İlgili konular