Bir sitede herkese açık olarak göstermek istediğiniz kullanıcılar kullanıcısa , yani bir hesabınız varsa ve yayın yazıyorsa, bence WordPress kullanıcı işlevini kullanmak daha iyidir: CPT'ye koyacağınız tüm bilgiler kullanıcı meta verilerine de eklenebilir ve kullanıcı oluşturmak zorunludur (giriş yapmak zorundalar), bir CPT oluşturmaktan kaçınılabilir ve benim için gereksizdir.
Ancak, bazı nedenlerden dolayı bir CPT kullanmanın daha basit olabileceğini biliyorum :
- WP admin'deki varsayılan profil sayfasında çok az bilgi var.
- WP'de hiç genel profil sayfası yok:
author.php
bir profil sayfası değil.
- Profil sayfasına ek olarak, muhtemelen istediğiniz döngü personel aracılığıyla, ve kullanabileceğiniz tabii
WP_User_Query
bunu yapmak, ama gereken kullanıcılardan personel izole gizli biraz zor olabilir: Kullanıcı taksonomisi ve kullanıcı rollerini edebilir kullanarak yoktur herkese açık olarak görünür olmaması gereken herhangi bir kullanıcıya genel rol atamak istiyorsanız sorun oluşturabilirsiniz .
Neyse ki bu problemler gerçek problem değildir ve kolayca çözülebilir. Önerdiğim iş akışı:
- Yeni bir kullanıcı rolü oluşturun. Standart bir rolden yetenekleri klonlayabilirsiniz, ancak bir rol oluşturmak ve personeli diğer kullanıcılardan izole etmek çok kolay olacaktır.
- Kullanıcı profilleri için özel alanlar ekleyin ve istediğiniz tüm bilgileri girin.
- Kullanıcı döngüsünü ve kullanıcı profilini işleyecek bir sayfa şablonu oluşturun. Nasıl? 4. noktaya bakın.
- Yeniden yazma bitiş noktası oluşturun. Bu şekilde, benzer bir URL
example.com/staff
bir sayfayı çağıracaktır (3. şablonda oluşturulan şablonu atadığınız URL) ve benzer bir URL example.com/staff/user/nickname
aynı sayfayı çağıracak, ancak kullanıcıyı göstermek için sayfada kullanabileceğiniz user
değere nickname
sahip sorgu var değerini iletecektir. profil.
1., 2. ve 4. bir eklenti içinde kolayca yapılabilir. Size bu eklentinin kemiklerini vereceğim , bu geliştirilmelidir:
<?php
/**
* Plugin Name: Staff Plugin
* Description: Test
* Author: G.M.
*/
/**
* Add a new role cloning capabilities from editor and flush rewrite rules
*/
function install_staff_plugin() {
$editor = get_role( 'editor' );
add_role( 'staff', 'Staff', $editor->capabilities );
staff_plugin_endpoint();
flush_rewrite_rules();
}
/**
* Remove the role and flush rewrite rules
*/
function unistall_staff_plugin() {
remove_role( 'staff' );
flush_rewrite_rules();
}
/**
* Add the endpoint
*/
function staff_plugin_endpoint() {
add_rewrite_endpoint( 'user', EP_PAGES );
}
/**
* Add custom field to profile page
*/
function staff_plugin_profile_fields( $user ) {
$fields = array(
'facebook' => __('Facebook'),
'twitter' => __('Twitter'),
'photo_id' => __('Photo ID (use attachment id)')
);
echo '<h3>' . __('Staff Information') . '</h3>';
echo '<table class="form-table">';
foreach ( $fields as $field => $label ) {
$now = get_user_meta( $user->ID, $field, true ) ? : "";
printf( '<tr><th><label for="%s">%s</label></th>',
esc_attr($field), esc_html($label) );
printf( '<td><input type="text" name="%s" id="%s" value="%s" class="regular-text" /><br /></td></tr>',
esc_attr($field), esc_attr($field), esc_attr($now) );
}
echo '</table>';
}
/**
* Save the custom fields
*/
function staff_plugin_profile_fields_save( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) return;
$fields = array( 'facebook', 'twitter', 'photo_id' );
foreach ( $fields as $field ) {
if ( isset( $_POST[$field] ) )
update_user_meta( $user_id, $field, $_POST[$field] );
}
}
add_action( 'init', 'staff_plugin_endpoint' );
add_action( 'show_user_profile', 'staff_plugin_profile_fields' );
add_action( 'edit_user_profile', 'staff_plugin_profile_fields' );
add_action( 'personal_options_update', 'staff_plugin_profile_fields_save' );
add_action( 'edit_user_profile_update', 'staff_plugin_profile_fields_save' );
register_activation_hook( __FILE__, 'install_staff_plugin' );
register_deactivation_hook( __FILE__, 'unistall_staff_plugin' );
Eklenti tam olarak söylediğim şeyi yapıyor. Kullanıcı profilleri için özel alanlar eklemeyle ilgili olarak, örnek olarak yalnızca 3 alan ekledim. Bunlardan biri kullanıcı görüntüsü için kullanılmak üzere tasarlanmıştır ve bir ekin kimliğini kabul eder. Tabii ki gerçek dünyada medya yükleyiciyi aramak ve kullanıcının bir resim yüklemeyi seçmesine izin vermek daha iyidir, ancak bu bu cevap kapsamında değildir ...
Eklenti kaydedilip etkinleştirildikten sonra sayfa şablonu oluşturmanız, bir sayfa oluşturmanız ve bu şablonu atamamız gerekir. Yine, burada şablon için bir kavram kanıtı göndereceğim:
<?php
/**
* Template Name: Staff Page
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
/* The page content */
while ( have_posts() ) : the_post();
$page_link = get_permalink();
the_content();
endwhile;
$required_user = get_query_var( 'user' );
$wanted_meta = array(
'first_name', // This is a standard meta
'facebook', // This is an example of custom meta
'twitter' // This is another example of custom meta
);
if ( empty( $required_user ) ) {
/* The Users Loop */
// Customize the args as you need
$args = array (
'role' => 'Staff',
'orderby' => 'post_count',
'order' => 'DESC',
'fields' => 'all'
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
$profile_url = trailingslashit($page_link) . 'user/' . $user->user_nicename;
// This gets ALL the meta fields as a 2 dimensional array (array of arrays)
$meta_fields = get_user_meta( $user->ID );
?>
<div id="user-<?php echo $user->ID ?>">
<?php
// An example of custom meta where to save the id of an attachment
if ( isset($meta_fields['photo_id'][0]) && ! empty($meta_fields['photo_id'][0]) ) {
echo '<a href="' . esc_url($profile_url) . '/">';
echo wp_get_attachment_image( $meta_fields['photo_id'][0], 'medium' );
echo '</a>';
}
?>
<h2><?php echo '<p><a href="' .esc_url( $profile_url ) . '/">' .
$user->display_name . '</a></p>';?></h2>
<p><?php echo $meta_fields['description'][0]; ?></p>
<ul>
<?php
foreach ( $wanted_meta as $key ) {
if ( isset($meta_fields[$key][0]) && ! empty($meta_fields[$key][0]) ) {
?>
<li><?php echo $meta_fields[$key][0]; ?></li>
<?php }
} ?>
</ul>
</div>
<?php
}
}
} else {
/* One User Requested */
$user = get_user_by( 'slug', $required_user );
if ( $user ) {
?>
<div id="user-<?php echo $user->ID ?>">
<?php
$meta_fields = get_user_meta( $user->ID );
if ( isset( $meta_fields['photo_id'][0] ) && ! empty( $meta_fields['photo_id'][0] ) ) {
echo wp_get_attachment_image( $meta_fields['photo_id'][0], 'full' );
}
?>
<h1><?php echo '<p>' . $user->display_name . '</p>';?></h1>
<p><?php echo $meta_fields['description'][0]; ?></p>
<p>
<a href="<?php echo get_author_posts_url($user->ID); ?>"><?php
printf(__('See all posts by %s'), $user->display_name); ?></a> |
<a href="<?php echo $page_link; ?>"><?php _e('Back to Staff'); ?></a>
</p>
<ul>
<?php
foreach ( $wanted_meta as $key ) {
if ( isset( $meta_fields[$key][0] ) && ! empty( $meta_fields[$key][0] ) ) {
?>
<li><?php echo $meta_fields[$key][0]; ?></li>
<?php
}
} ?>
</ul>
</div>
<?php
}
}
?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_footer(); ?>
Şimdi bir sayfa oluşturun ve bu şablonu atayın. Ardından, personelinize 'personel' kullanıcı rolünü atayın ve profilleri doldurun.
Son dokunuş olarak, author.php
muhtemelen başlığa, bunun gibi bir şey ekleyebilirsiniz:
<div class="author-info">
<?php
$curauth = ( get_query_var( 'author_name' ) ) ?
get_user_by( 'slug', get_query_var( 'author_name' ) ) :
get_userdata( get_query_var( 'author' ) );
$photo = get_user_meta( $curauth->ID, 'photo_id', true );
if ( $photo ) echo wp_get_attachment_image( $photo, 'medium' );
?>
<h2><?php echo $curauth->display_name; ?></h2>
<h3><em><?php echo $curauth->user_description; ?></em></h3>
</div>
Bu kadar. Test edin, geliştirin ve eğlenin.