ওয়ার্ডপ্রেস ব্যবহারকারী প্রোফাইল ব্যবহার করে 'স্টাফ' এর জন্য কাস্টম পোস্টের ধরণ?


13

আমি যে দৃশ্যটি সামনে আসছি তা হ'ল এমন একটি সংস্থার বেশ কয়েকজন কর্মী থাকতে পারে যার জন্য আমি জীবনী সংক্রান্ত তথ্য সহ কিছু প্রকারের তালিকা এবং একক প্রোফাইল পৃষ্ঠা পেতে চাই।

সাধারণত আমি কর্মীদের জন্য একটি কাস্টম পোস্ট টাইপ এবং প্রয়োজনে একটি কাস্টম ট্যাক্সনমি তৈরি করব।

তবে এখন আমি ভাবছি যে ওয়ার্ডপ্রেসে অন্তর্নির্মিত "ব্যবহারকারীর" পোস্ট প্রকারটি ব্যবহার করা সর্বোত্তম নয়। আমি বুঝতে পারি যে আমি ব্যবহারকারীর প্রোফাইল ক্ষেত্রগুলি কাস্টমাইজ করতে পারি, ব্যবহারকারীর তালিকা প্রদর্শন করতে পারি, একক প্রোফাইল ইত্যাদি কাস্টম ট্যাক্সনোমাই সম্ভব হয় আমিও বিশ্বাস করি।

এখানে কি সেরা অনুশীলন আছে?

আমার এখন একটি কেস আছে যেখানে সমস্ত কর্মীরাও নিজের নামে ব্লগ পোস্ট লিখছেন এবং সুতরাং যে কোনও উপায়ে ব্যবহারকারীর অ্যাকাউন্ট রয়েছে এবং এটি আমার মন কেটে গেছে যে সম্ভবত আমি তাদের ব্যবহারকারীর প্রোফাইলগুলি খুঁজে বের করতে এবং লেখক.এফপি এর পরিবর্তে কাজ করার চেয়ে আরও ভাল better 'স্টাফ' এর কাস্টম পোস্ট ধরণ ব্যবহার করে।

আপাতত আমি সিপিটি-এর সাথে যাচ্ছি এবং তাদের "স্টাফ" পোস্টটিকে তাদের "ব্যবহারকারীর" অ্যাকাউন্টের সাথে সংযুক্ত করতে এবং এর ফলে তাদের একক কর্মী পৃষ্ঠায় তাদের ব্লগ পোস্টগুলির তালিকা তৈরি করতে পোস্ট 2 পোস্ট প্লাগইন ব্যবহার করছি।

ওয়ার্ডপ্রেসে এটি কীভাবে সর্বোত্তমভাবে প্রয়োগ করা যায় সে সম্পর্কে কোনও ধারণা প্রশংসিত।

উত্তর:


17

আপনি যদি কোনও সাইটে প্রকাশ্যে দেখাতে চান এমন লোকেরা ব্যবহারকারী হন , অর্থাত্ একটি অ্যাকাউন্ট আছে এবং পোস্ট লিখতে পারেন, আমার মতে ওয়ার্ডপ্রেস ব্যবহারকারীর কার্যকারিতাটি ব্যবহার করা আরও ভাল: আপনি সিপিটিতে রাখবেন এমন সমস্ত তথ্যও ব্যবহারকারীর মেটাডেটাতে রাখা যেতে পারে , এবং ব্যবহারকারী তৈরি করা বাধ্যতামূলক (তাদের লগইন করতে হবে), যখন কোনও সিপিটি তৈরি করা এড়ানো যায় এবং, আমার জন্য এটি অপ্রয়োজনীয়।

তবে, আমি জানি যে সিপিটি ব্যবহার করা সহজতর হতে পারে , কিছু কারণে:

  1. ডাব্লুপি প্রশাসকের ডিফল্ট প্রোফাইল পৃষ্ঠায় অল্প তথ্য আছে।
  2. ডব্লিউপি-তে কোনও পাবলিক প্রোফাইল পৃষ্ঠা নেই: author.phpএটি প্রোফাইল পৃষ্ঠা নয়।
  3. প্রোফাইল পৃষ্ঠা ছাড়াও, আপনি সম্ভবত কর্মীদের মাধ্যমে লুপ করতে চান , এবং অবশ্যই আপনি এটি করতে ব্যবহার করতে পারেন WP_User_Queryতবে ব্যবহারকারীদের কাছ থেকে কর্মীদের বিচ্ছিন্ন করা যা অবশ্যই লুকিয়ে রাখতে হবে কিছুটা কঠিন হতে পারে: কোনও ব্যবহারকারীর শ্রমশক্তি নেই এবং ব্যবহারকারীর ভূমিকাগুলি ব্যবহার করতে পারেন সমস্যাগুলি উত্পন্ন করুন যদি আপনি এমন কোনও ব্যবহারকারীর কাছে সর্বজনীন ভূমিকা অর্পণ করতে চান যা অবশ্যই প্রকাশ্যে দৃশ্যমান হবে না।

ভাগ্যক্রমে এই সমস্যাগুলি আসল সমস্যা নয় এবং সহজেই সমাধান করা যায়। আমার প্রস্তাবিত কর্মপ্রবাহটি হ'ল:

  1. একটি নতুন ব্যবহারকারীর ভূমিকা তৈরি করুন। আপনি একটি আদর্শ ভূমিকা থেকে ক্ষমতাগুলি ক্লোন করতে পারেন, তবে একটি ভূমিকা তৈরি করা এবং অন্যান্য ব্যবহারকারীদের থেকে কর্মীদের বিচ্ছিন্ন করা অত্যন্ত সহজ হবে super
  2. ব্যবহারকারীর প্রোফাইলগুলির জন্য কাস্টম ক্ষেত্রগুলি যুক্ত করুন এবং আপনার পছন্দসই তথ্য রাখুন।
  3. এমন একটি পৃষ্ঠা টেম্পলেট তৈরি করুন যা ব্যবহারকারীর লুপ এবং ব্যবহারকারীর প্রোফাইল পরিচালনা করবে। কিভাবে? পয়েন্ট 4 দেখুন।
  4. পুনর্লিখনের শেষ পয়েন্টটি তৈরি করুন। এইভাবে একটি ইউআরএল example.com/staffএকটি পৃষ্ঠায় কল করবে (আপনি যেটিকে 3. এ তৈরি টেমপ্লেটটি অর্পণ করেছেন) এবং একটি ইউআরএল example.com/staff/user/nicknameএকই পৃষ্ঠাতে কল করবে, কিন্তু আপনি যে পৃষ্ঠাটি ব্যবহারকারীর দেখানোর জন্য ব্যবহার করতে পারবেন সেই userমান সহ ক্যোয়ারী ভেরিও পাস করুন pass 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>

এখানেই শেষ. এটি পরীক্ষা করুন, এটিকে উন্নত করুন এবং এটিতে মজা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.