web-dev-qa-db-fra.com

Si rôle d'utilisateur spécifique, poste collant

Nous disons que si un utilisateur a le rôle d'utilisateur auteur, toutes ses nouvelles publications seront automatiquement collantes.

Comment puis je faire ça?

2
ANdy
add_action('save_post', 'mo_make_it_sticky_if_role');
function mo_make_it_sticky_if_role( $post_id ) {
    if( current_user_can('author') ) {
        stick_post( $post_id );
    }
}

Si l'utilisateur a le rôle d'utilisateur author et qu'il crée un nouveau message, il devient alors collant par défaut, même s'il utilise quelque chose de créateur avant.
Cela ne fonctionnera que si le auteur fait un nouveau message.
Ses anciens messages, créés avant l’ajout de cette fonction, ne resteront pas figés.

0
ANdy

On dirait que c'est possible.

Les post-it sont stockés sous forme de tableau d'identifiants dans une option appelée 'sticky_posts`, et vous pouvez modifier les options en utilisant des hooks, donc ... Il y a une chance que quelque chose comme ceci fonctionne:

function fake_sticky_posts_for_author() {
    $user = wp_get_current_user();

    if ( get_current_user_id() && in_array('author', $user->roles) ) {
        // Return the IDs of posts that you want to see as sticky
        // For example this gets posts of currently logged in user
        return get_posts( array(
            'author' => get_current_user_id(),
            'fields' => 'ids',
            'posts_per_page' => -1
        ) );
    }

    return false;
}
add_filter( 'pre_option_sticky_posts', 'fake_sticky_posts_for_author' );
// we use pre_option_sticky_posts in here, since we want to ignore value of this option, so there is no point to load it

D'autre part, si vous souhaitez définir tous les articles écrits par un auteur comme collants, vous pouvez utiliser une autre approche qui pourrait être meilleure (plus efficace). Vous pouvez vérifier pendant save_post si l'auteur a donné le rôle et le définir comme correctif si tel est le cas:

function stick_authors_posts_automatically($post_id) {
    // If this is just a revision, don't do anything
    if ( wp_is_post_revision( $post_id ) )
        return;

    $user = new WP_User( get_post_field ('post_author', $post_id) );

    if ( in_array('author', $user->roles) ) {    
        // stick the post
        stick_post( $post_id );    
    }
}
add_action( 'save_post', 'stick_authors_posts_automatically' );

Disclaimer: Ce code n'est pas testé, il peut donc y avoir des fautes de frappe, etc. Mais l'idée est claire, j'espère :)

1