Kendi WordPress Kullanıcı İletişim Alanlarınızı Oluşturun
Bugün sizler için yeni bir eklenti oluşturdum. Kullanıcıların iletişim yöntemleriyle ilgilenen bir eklenti. Temel olarak yönetimde bir kullanıcıyı düzenlediğinizde, bir "iletişim bilgileri" bloğu bulunur. Peki, size kendi alanlarınızı oraya nasıl ekleyeceğinizi ve biraz daha ileri giderek bu yeni alanları kayıt sayfasında nasıl göstereceğinizi (veya göstermeyeceğinizi) göstermek istiyorum.
İşte yaratacağımız şeyin bir önizlemesi:
Ve bunu yapmak için her zamanki gibi güzel ve basit bir eklenti yaratacağız!
Adım 1: Eklentiyi Oluşturun
Wp-content/plugins'de yeni bir klasör oluşturun ve buna "özel kullanıcı-iletişim-yöntemleri" adını verin. Bu yeni oluşturulan klasörün içinde “rc-custom-user-contact-methods.php” adlı bir dosya oluşturun ve onu favori editör yazılımınızda açın.
Bu içeriği boş dosyanıza yerleştirin. Bu kod yalnızca eklentiyi kaydeder:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
2. Adım: Özel Alanlarınızı Tanımlayın
Daha sonra, özel alanlarımızı, kullanıcı sürümü sayfasında ve ayrıca kayıt varsayılan sayfasında kullanılacak alanları içerecek bir değişken oluşturmamız gerekiyor. Bu alanları $extra_fields adlı bir değişkene kaydedelim.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
Her alanı 3 parametreli bir dizi içinde saklıyoruz; ilki alan kimliği, ikincisi alan etiketi ve sonuncusu alanın kayıt sayfasında gösterilip gösterilmeyeceğini tanımlayan boole bilgisidir. . Örneğin yer tutucu veya gerekli bilgi gibi istediğiniz kadar parametre ekleyebilirsiniz.
Adım 3: Doğru Filtreyi Bağlayın
Şimdi bir fonksiyonu sağ filtreye bağlamamız gerekiyor. Bizim özel durumumuzda filtre “user_contactmethods”, oluşturacağımız fonksiyonun adı ise “rc_add_user_contactmethods”.
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
Adım 4: Özel Alanlarımızı Oluşturun
Artık “rc_add_user_contactmethods” fonksiyonunu oluşturmamız gerekiyor. Özel alanlarımızı kullanıcı düzenleme sayfasına ekleyecek olandır. İyi haber şu ki, alanlarımızı bir dizi içinde sakladık; bu, aşağıdaki fonksiyonun tamamen dinamik olacağı ve sadece $extra_fields değişkenini değiştirerek yeni alanlar eklemenin oldukça kolay olacağı anlamına geliyor.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
Bu adımda eklentiyi kaydedip etkinleştirirseniz kullanıcı düzenleme sayfasında özel alanlarınızı görmelisiniz. Doğru kancayı kullandığımız için alan verilerini "kaydet" oluşturmamız gerekmez. Yani eklenti şu an için harika çalışıyor. Ancak biraz daha ileri giderek bu alanları kayıt sayfasında görüntüleme seçeneğini eklemek istiyorum. Ayarlar altında “Herkes kayıt olabilir” onay kutusunu işaretlediğinizden emin olun, aksi takdirde “Kayıt Ol” bağlantısını göremezsiniz.
Adım 5: Kayıt Sayfası Kancaları
Kayıt sayfasına alanlarımızı eklemek için en az iki hooka erişmemiz ve iki fonksiyon oluşturmamız gerekiyor. Biri alanları görüntülemek için, ikincisi ise alan verilerini veritabanına kaydetmek için.
Fonksiyonlarımızı bağlayalım:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
Adım 6: Özel Alan Kayıt Sayfasını Görüntüleyin
Yukarıdaki kodda iki fonksiyon tanımladık. Bunlardan ilki kayıt sayfasındaki alanları görüntülemektir. Bu kısımda $extra_fields içindeki her dizinin üçüncü parametresine dikkat etmemiz gerekiyor. Bu boolean parametresi, alanların gösterilmesi gerekip gerekmediğini söyler. Doğru: alan gösteriliyor, yanlış: alan gösterilmiyor.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
Adım 7: Kayıt Sürecinde Alan Değerlerini Saklayın
Artık alanlarımız kayıt sayfasında gösterildiğine göre, değerlerini veritabanına kaydetmemiz gerekiyor. “rc_user_register_save_extra_fields” fonksiyonunun amacı da budur. Bunu yapmak için “wp_update_user()” fonksiyonunu kullanmamız gerekiyor.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Çözüm
Kullanıcı iletişim yöntemlerine yeni alanların nasıl ekleneceğinin temellerini gördük ama hepsi bu. Örneğin, basit bir unset() işlemi yaparak "Yahoo IM", "AIM" ve "Jabber" gibi mevcut alanları kaldırabilirsiniz. Ancak, örneğin telefon numarasının uygun bir formatta olup olmadığını, bir alanın gerekli olup olmadığını vb. kontrol etmek için özel alanlarınızı temizlemek için bazı işlevler de ekleyebilirsiniz. Yorumlarda belirli özellikler istemekten çekinmeyin!
Ve son olarak… herhangi bir alanınıza ait veriyi görüntülemek istiyorsanız şunu kullanın:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );