यदि आप जिन लोगों को किसी साइट पर सार्वजनिक रूप से दिखाना चाहते हैं , वे उपयोगकर्ता हैं , जिनके पास एक खाता है और पोस्ट लिखा है, तो मेरी राय में वर्डप्रेस उपयोगकर्ता की कार्यक्षमता का उपयोग करना बेहतर है: सीपीटी में आपके द्वारा डाली गई सभी जानकारी को उपयोगकर्ता मेटाडेटा में भी डाला जा सकता है। , और उपयोगकर्ताओं को बनाना अनिवार्य है (उन्हें लॉगिन करना होगा), जबकि सीपीटी बनाने से बचा जा सकता है और, मेरे लिए, बेमानी है।
हालाँकि, मुझे पता है कि CPT का उपयोग कुछ कारणों से सरल हो सकता है :
- WP व्यवस्थापक पर डिफ़ॉल्ट प्रोफ़ाइल पृष्ठ में बहुत कम जानकारी है।
- WP में कोई सार्वजनिक प्रोफ़ाइल पृष्ठ
author.php
नहीं है : एक प्रोफ़ाइल पृष्ठ नहीं है।
- प्रोफाइल पेज के अलावा, आप शायद कर्मचारियों के माध्यम से लूप करना चाहते हैं , और निश्चित रूप से आप ऐसा करने के
WP_User_Query
लिए उपयोग कर सकते हैं , लेकिन उपयोगकर्ताओं से अलग किए जाने वाले कर्मचारियों को छिपाना आवश्यक है, यह थोड़ा कठिन हो सकता है: कोई उपयोगकर्ता वर्गीकरण नहीं है और उपयोगकर्ता भूमिकाओं का उपयोग कर सकते हैं यदि आप किसी भी उपयोगकर्ता को सार्वजनिक भूमिका असाइन करना चाहते हैं तो समस्याएँ उत्पन्न करें, जो सार्वजनिक रूप से दिखाई नहीं देनी चाहिए।
सौभाग्य से ये समस्याएं वास्तविक समस्याएं नहीं हैं और इन्हें आसानी से हल किया जा सकता है। मेरा सुझाव है कि वर्कफ़्लो है:
- एक नई उपयोगकर्ता भूमिका बनाएँ। आप एक मानक भूमिका से क्षमताओं को क्लोन कर सकते हैं, लेकिन एक भूमिका बना सकते हैं, और अन्य उपयोगकर्ताओं से कर्मचारियों को अलग कर सकते हैं, सुपर-आसान होगा।
- उपयोगकर्ता प्रोफ़ाइल के लिए कस्टम फ़ील्ड जोड़ें, और अपनी इच्छित सभी जानकारी डालें।
- एक पेज टेम्प्लेट बनाएं जो यूजर लूप और यूजर प्रोफाइल को हैंडल करेगा। कैसे? बिंदु 4 को देखें।
- फिर से लिखना एक समापन बिंदु बनाएँ। इस तरह से एक URL जैसा
example.com/staff
पेज (जिसे आप 3. पर बनाया गया टेम्प्लेट असाइन करते हैं) example.com/staff/user/nickname
को कॉल करेंगे और जैसा URL होगा वैसा ही पेज कॉल करेगा, लेकिन यूजर को दिखाने के लिए आप जिस पेज का उपयोग कर सकते हैं उसके user
साथ क्वेरी वर्जन पास nickname
करें प्रोफ़ाइल।
1., 2. और 4. एक प्लगइन में आसानी से किया जा सकता है। मैं आपको इस प्लगइन की हड्डियाँ दूंगा , जिसे सुधारना चाहिए:
<?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' );
प्लगइन बिल्कुल वही करता है जो मैंने कहा था। उपयोगकर्ता प्रोफाइल के लिए कस्टम फ़ील्ड जोड़ने के बारे में, उदाहरण के लिए, मैंने सिर्फ 3 फ़ील्ड जोड़े। उनमें से एक को उपयोगकर्ता छवि के लिए उपयोग करने का इरादा है और एक अनुलग्नक की आईडी को स्वीकार करता है। निश्चित रूप से वास्तविक दुनिया में मीडिया अपलोडर को कॉल करना बेहतर है और उपयोगकर्ता को एक छवि अपलोड करने के लिए चुनना है, लेकिन यह इस उत्तर के दायरे में नहीं है ...
प्लगइन सहेजने और सक्रिय होने के बाद, हमें पेज टेम्प्लेट बनाना होगा, पेज बनाना होगा और उस टेम्प्लेट को असाइन करना होगा। फिर, मैं यहाँ टेम्पलेट के लिए अवधारणा का प्रमाण पोस्ट करूँगा:
<?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(); ?>
अब एक पेज बनाएं और इस टेम्पलेट को असाइन करें। फिर अपने कर्मचारियों को उपयोगकर्ता की भूमिका 'स्टाफ' असाइन करें और प्रोफाइल भरें।
अंतिम स्पर्श के रूप में, आप अपने author.php
शीर्षकों में, संभवतः कुछ इस तरह से जोड़ सकते हैं:
<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>
बस इतना ही। इसे परखें, इसमें सुधार करें और इसके साथ मज़े करें।