Sélectionnez le souscripteur comme auteur de la publication dans le panneau d'administration?

12

Je veux pouvoir sélectionner un abonné qui est l'auteur d'un message dans l'admin pour qu'il affiche son nom comme ayant écrit le message, mais je ne souhaite pas leur accorder de privilèges supplémentaires (s'ils se connectent à la seule chose qu'ils ont peuvent accéder est leur profil).

Existe-t-il un moyen simple de procéder sans changer de rôles ni de fonctionnalités?

Merci

    
posée fxfuture 02.05.2012 - 02:33

7 réponses

15

C’est un simple bidouillage que j’ai écrit dans une situation similaire. Il affichera tous les Subscribers dans la liste déroulante Author lors de la modification / ajout d'un message / d'une page, à partir duquel vous pouvez sélectionner celui que vous voulez. Je pense que cela devrait fonctionner pour vous ...

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;
}

Le truc derrière ceci est que, une fois que vous avez soumis cette page, WP ne lit que l'ID $ utilisateur - > de ce menu déroulant dans le tableau $ _POST, et l'assigne en tant qu'auteur de publications. Et c'est ce que vous voulez!

    
réponse donnée Rutwick Gangurde 02.05.2012 - 14:27
8

À partir de WordPress 4.4.0, vous pouvez maintenant utiliser le filtre wp_dropdown_users_args . Le code est beaucoup plus simple maintenant:

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;

}
    
réponse donnée jg314 29.01.2016 - 23:27
2

Cette approche est similaire à @brasofilo. Mais cela ne fonctionne que dans l'écran d'édition, et non dans l'édition rapide, et inclut tous les utilisateurs (pas seulement les auteurs et les abonnés).

/* 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
        ) );
}

Ceci imite la metabox de l'auteur par défaut , mais l'appel wp_dropdown_users omet l'argument who=>'editors' . La valeur par défaut est la seule autre valeur qui est l'appel utilisateurs.

    
réponse donnée Stephen Harris 02.05.2012 - 14:12
1

Une meilleure façon de le faire ...

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>';

}
    
réponse donnée Andru-1983 01.03.2013 - 01:37
1

Ceci est un code lié par @Innate dans un commentaire (solution) à sa propre question, je ' Nous venons de nous adapter un peu et de tester le WP 3.3.2 (fonction wpse39084). Il montrera les abonnés dans les articles Edit et Quick Edit.

Nous avons également ajouté quelques actions (fonctions wpse50827) pour déplacer la boîte méta Auteur dans la boîte méta Publier les actions, pour une gestion plus facile.

Tout est lié à la publication, pas de pages ni de CPT ...

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>';
}
    
réponse donnée brasofilo 02.05.2012 - 13:38
0

J'ai fait quelque chose de similaire à la réponse acceptée ici, mais je voulais seulement montrer aux administrateurs et, dans mon cas, un rôle de «producteur» personnalisé, ensemble.

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;
}
    
réponse donnée D3XT3R 01.03.2015 - 00:10
0

Cela pourrait être une solution pour éviter l'erreur de montage rapide, où "cpt_slug" doit être remplacé par votre slug de type message personnalisé

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' ) );
}
    
réponse donnée Marcello Magi Spinetti 04.05.2017 - 16:17

Lire d'autres questions sur les étiquettes