অ্যাডমিন প্যানেলে পোস্ট লেখক হিসাবে গ্রাহক নির্বাচন করবেন?


16

আমি একজন গ্রাহককে প্রশাসকের কোনও পোস্টের একজন লেখক নির্বাচন করতে সক্ষম হতে চাই যাতে এটি পোস্টটি লিখিত রয়েছে বলে তাদের নামটি প্রদর্শন করে তবে আমি তাদের কোনও অতিরিক্ত সুযোগ দিতে চাই না (যদি তারা কেবলমাত্র প্রবেশ করতে পারে তবে লগইন করে তা হ'ল) তাদের প্রোফাইল)।

ভূমিকা এবং ক্ষমতা পরিবর্তন না করে এটি করার কোনও সহজ উপায় আছে?

ধন্যবাদ

উত্তর:


17

এটি একটি সাধারণ হ্যাক আমি একই পরিস্থিতিতে লিখেছি। এটি সম্পাদনা / পোস্ট / পৃষ্ঠা যুক্ত করার Subscribersসমস্ত Authorড্রপডাউন প্রদর্শিত হবে , যেখান থেকে আপনি যে কোনও একটি নির্বাচন করতে পারেন। আমি মনে করি এটি আপনার পক্ষে কাজ করা উচিত ...

add_filter('wp_dropdown_users', 'MySwitchUser');
function MySwitchUser($output)
{

    //global $post is available here, hence you can check for the post type here
    $users = get_users('role=subscriber');

    $output = "<select id=\"post_author_override\" name=\"post_author_override\" class=\"\">";

    //Leave the admin in the list
    $output .= "<option value=\"1\">Admin</option>";
    foreach($users as $user)
    {
        $sel = ($post->post_author == $user->ID)?"selected='selected'":'';
        $output .= '<option value="'.$user->ID.'"'.$sel.'>'.$user->user_login.'</option>';
    }
    $output .= "</select>";

    return $output;
}

এর পেছনের কৌশলটি হ'ল আপনি এই পৃষ্ঠাটি জমা দেওয়ার পরে, ডাব্লুপি এই ড্রপটি থেকে $ _POST অ্যারেটিতে কেবল $ ব্যবহারকারী-> আইডি পড়ে এবং পোস্ট লেখক হিসাবে নির্ধারিত করে। এবং আপনি কি চান!


অনেক ধন্যবাদ রটউইক! ঠিক আমার কী দরকার! আমাকে সবেমাত্র পরিবর্তন করতে হয়েছিল get ব্যবহারকারীদের = get_users (); অন্যথায় এটি সেখানে অন্যান্য ভূমিকার সাথে ব্যবহারকারীদের প্রদর্শন করে না
fxfuture

আপনি স্বাগতম সাথী! :) আসলে আমি এটি একটি কাস্টম ভূমিকার জন্য ব্যবহার করছি, সুতরাং পরামিতিগুলি ... খুশী আমি সহায়তা করতে পারতাম!
রটউইক গাঙ্গুরদে

আমি স্রেফ এটির সাথে একটি ছোটখাটো সমস্যা খুঁজে পেয়েছি - যখন আমি সম্পাদনা পোস্টের পৃষ্ঠাটি পুনরায় ঘুরে দেখি তখন অ্যাডমিনের কাছে ড্রপ ডাউন ডিফল্ট হয়, তাই আমি যদি লেখককে অনুসন্ধান না করে পরিবর্তন করে এবং সংরক্ষণ করি তবে এটি লেখককে অ্যাডমিনে পরিবর্তন করে। কোন ধারনা কিভাবে এটা ঠিক করতে হবে?
fxfuture

হ্যাঁ, আপনি এই পোস্টের জন্য লেখক পেয়েছেন এবং কোনও ব্যবহারকারী লেখকের সাথে মেলে কিনা তা পরীক্ষা করে দেখুন option
রটউইক গাঙ্গুরদে

2
global $postচলকটি মুদ্রণের চেষ্টা করুন ...
রটউইক গাঙ্গুরদে

13

ওয়ার্ডপ্রেস ৪.৪.০ হিসাবে আপনি এখন wp_dropdown_users_argsফিল্টারটি ব্যবহার করতে পারেন । কোডটি এখন অনেক সহজ:

add_filter( 'wp_dropdown_users_args', 'add_subscribers_to_dropdown', 10, 2 );
function add_subscribers_to_dropdown( $query_args, $r ) {

    $query_args['who'] = '';
    return $query_args;

}

3
এটি সঠিক / স্বীকৃত উত্তর হওয়া উচিত। সরাসরি কোডেক্স থেকে: ডেভেলপার.ওয়ার্ডপ্রেস.অর্গ
রেফারেন্স

2

এটি @ ব্রাজোফিলোর অনুরূপ পন্থা। তবে কেবল দ্রুত সম্পাদনা করার পরিবর্তে সম্পাদনা পোস্ট স্ক্রিনে কাজ করে এবং এতে সমস্ত ব্যবহারকারী (কেবল লেখক এবং গ্রাহক নয়) অন্তর্ভুক্ত।

/* Remove Author meta box from post editing */
function wpse50827_author_metabox_remove() {
    remove_meta_box('authordiv', 'post', 'normal');
}
add_action('admin_menu', 'wpse50827_author_metabox_remove');


/* Replace with custom Author meta box */
function wpse39084_custom_author_metabox() {  
    add_meta_box( 'authordiv', __('Author'), 'wpse39084_custom_author_metabox_insdes','post');  
 } 
add_action( 'add_meta_boxes', 'wpse39084_custom_author_metabox');  


/* Include all users in post author dropdown*/
/* Mimics the default metabox http://core.trac.wordpress.org/browser/trunk/wp-admin/includes/meta-boxes.php#L514 */
function wpse39084_custom_author_metabox_insdes() {
      global $user_ID;
      global $post;
      ?>
      <label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>

      <?php
        wp_dropdown_users( array(
             'name' => 'post_author_override',
             'selected' => empty($post->ID) ? $user_ID : $post->post_author,
             'include_selected' => true
        ) );
}

এটি ডিফল্ট লেখক মেটাবক্সের নকল করে তবে কলটি আর্গুমেন্টটিকে wp_dropdown_usersবাদ দেয় who=>'editors'। এটি কল ব্যবহারকারীদের একমাত্র অন্যান্য মান হিসাবে ডিফল্ট।


ধন্যবাদ স্টিফেন আমি রটউইকের সমাধানটি ব্যবহার করে শেষ করেছি কারণ এটি ইতিমধ্যে সিপিটি নিয়ে কাজ করে তবে আপনার উত্তরটির প্রশংসা করুন :)
fxfuture

বিশ্বব্যাপী পোস্ট যোগ করা হয়েছে; আসল ফাংশনটিতে যেহেতু আমি কোনও পোস্ট সম্পাদনা করার সময় এটি বিদ্যমান লেখককে তুলে নিচ্ছিল না, তবে এটি সর্বদা আমাকে পোস্ট লেখক হিসাবে গ্রহণ করেছিল। খুব অনন্যোয়িং।
ড্যানিয়েলডেখে

1

এটি করার একটি আরও ভাল উপায় ...

add_filter('wp_dropdown_users', 'MySwitchUser');
function MySwitchUser()
{
    global $post; // remove if not needed
    //global $post is available here, hence you can check for the post type here
    $users = get_users('role=subscriber');

    echo'<select id="post_author_override" name="post_author_override" class="">';

    echo'<option value="1">Admin</option>';

    foreach($users as $user)
    {
        echo '<option value="'.$user->ID.'"';

        if ($post->post_author == $user->ID){ echo 'selected="selected"'; }

        echo'>';
        echo $user->user_login.'</option>';     
    }
    echo'</select>';

}

আমার পক্ষে কাজ করে না: এটি সর্বদা অ্যাডমিন অ্যাকাউন্টকে পোস্টের নতুন লেখক হওয়ার প্রস্তাব দেয়, যা ব্যবহারকারীদের পক্ষে পোস্টগুলি আপডেট করা খুব কঠিন করে তোলে (এবং তারপরে স্বয়ংক্রিয়ভাবে সম্পাদনার অধিকার হারাতে পারে)।
danieldekay

1

এটি নিজের প্রশ্নের সাথে একটি মন্তব্য (সমাধান) দিয়ে @ ইন্নাট দ্বারা সংযুক্ত একটি কোড , আমি কিছুটা অভিযোজিত করেছি এবং ডাব্লুপি ৩.৩.২ (ফাংশন wpse39084) তে পরীক্ষা করেছি। এটি সম্পাদনা এবং দ্রুত সম্পাদনা পোস্টগুলিতে গ্রাহকদের দেখায়।

আরও সহজ ব্যবস্থাপনার জন্য প্রকাশিত পদক্ষেপ মেটা বাক্সের ভিতরে লেখক মেটা বাক্সটি সরানোর জন্য বেশ কয়েকটি ক্রিয়া (ফাংশন wpse50827) যুক্ত করেছেন।

সবকিছু পোস্ট সম্পর্কিত, কোনও পৃষ্ঠা বা সিপিটি নয় ...

foreach( array( 'edit.php', 'post.php' ) as $hook )
    add_action( "load-$hook", 'wpse39084_replace_post_meta_author' );       

/* Show Subscribers in post author dropdowns - edit and quickEdit */
function wpse39084_replace_post_meta_author()
{
    global $typenow;
    if( 'post' != $typenow )
        return;

    add_action( 'admin_menu', 'wpse50827_author_metabox_remove' );
    add_action( 'post_submitbox_misc_actions', 'wpse50827_author_metabox_move' );
    add_filter( 'wp_dropdown_users', 'wpse39084_showme_dropdown_users' );
}

/* Modify authors dropdown */
function wpse39084_showme_dropdown_users( $args = '' )
{
    $post = get_post();
    $selected = $post->post_author;
    $siteusers = get_users( 'orderby=nicename&order=ASC' ); // you can pass filters and option
    $re = '';
    if( count( $siteusers ) > 0 )
    {
        $re = '<select name="post_author_override" id="post_author_override">';
        foreach( $siteusers as $user )
        {
            $re .= '<option value="' . $user->ID . '">' . $user->user_nicename . '</option>';
        }
        $re .= '</select>';
        $re = str_replace( 'value="' . $selected . '"', 'value="' . $selected . '" selected="selected"', $re );
    }
    echo $re;
}

/* Remove Author meta box from post editing */
function wpse50827_author_metabox_remove()
{
    remove_meta_box( 'authordiv', 'post', 'normal' );
}


/* Move Author meta box inside Publish Actions meta box */
function wpse50827_author_metabox_move()
{
    global $post;

    echo '<div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">Author: ';
    post_author_meta_box( $post );
    echo '</div>';
}

1
ধন্যবাদ ব্রাসোফিলো আমি রটউইকের সমাধানটি ব্যবহার করে শেষ করেছি কারণ এটি ইতিমধ্যে সিপিটি নিয়ে কাজ করে তবে আপনার উত্তরটির প্রশংসা করুন :)
fxfuture

0

আমি এখানে স্বীকৃত উত্তরের অনুরূপ কিছু করেছি তবে কেবল অ্যাডমিনদের দেখাতে এবং আমার ক্ষেত্রে, একসাথে একটি কাস্টম 'প্রযোজক' ভূমিকা দেখাতে চেয়েছিল।

add_filter('wp_dropdown_users', 'custom_author_select');
function custom_author_select($output){

    //global $post is available here, hence you can check for the post type here
    $admins = get_users('role=administrator');
    $producers = get_users('role=producer');
    $users = array_merge($admins, $producers);

    $output = "<select id=\"post_author_override\" name=\"post_author_override\" class=\"\">";

    //Leave the admin in the list
    $output .= "<option value=\"1\">Admin</option>";

    foreach($users as $user){
        $sel = ($post->post_author == $user->ID)?"selected='selected'":'';
        $output .= '<option value="'.$user->ID.'"'.$sel.'>'.$user->user_login.'</option>';
    }

    $output .= "</select>";

    return $output;
}

0

দ্রুত সম্পাদনায় ত্রুটি এড়াতে এটি একটি সমাধান হতে পারে, যেখানে আপনার কাস্টম পোস্টের স্লাগের সাথে "সিপিটি_স্লাগ" প্রতিস্থাপন করা উচিত

add_filter('wp_dropdown_users', 'MySwitchUser');

function MySwitchUser($output)
{
    global $typenow;
if ((is_edit_page('edit') && "cpt_slug" == $typenow)||(is_edit_page('new') && "cpt_slug" == $typenow)){
    global $post;
    $users = get_users();
    $output = "<select id=\"post_author_override\" name=\"post_author_override\" class=\"\">";   
    foreach($users as $user)
    {
        $sel = ($post->post_author == $user->ID)?"selected='selected'":'';
        $output .= '<option value="'.$user->ID.'"'.$sel.'>'.$user->user_login.'</option>';
    }
    $output .= "</select>";   
} 
return $output;
}



function is_edit_page($new_edit = null){
    global $pagenow;
    if (!is_admin()) return false;
    if($new_edit == "edit")
        return in_array( $pagenow, array( 'post.php',  ) );
    elseif($new_edit == "new") 
        return in_array( $pagenow, array( 'post-new.php' ) );
    else 
        return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.