wake-up-neo.net

Wenn bestimmte Benutzerrolle dann klebriger Beitrag

Wir sagen, wenn ein Benutzer eine Benutzerrolle als Autor hat, bleiben alle seine neuen Beiträge automatisch erhalten.

Wie kann ich das machen?

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

Wenn der Benutzer die Benutzerrolle author hat und einen neuen Beitrag erstellt, bleibt dieser standardmäßig erhalten, auch wenn er einen anderen Beitrag erstellt.
Es wird nur funktionieren, wenn der Autor einen neuen Beitrag erstellt.
Seine alten Beiträge, die er erstellt hat, bevor diese Funktion hinzugefügt wurde, werden nicht klebrig.

0
ANdy

Es sieht aus wie es möglich ist.

Sticky-Posts werden als Array von IDs in einer Option namens "sticky_posts" gespeichert, und Sie können Optionen mit Hilfe von Hooks ändern. Es besteht die Möglichkeit, dass Folgendes funktioniert:

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

Wenn Sie dagegen alle Posts, die von einem Autor verfasst wurden, als "sticky" festlegen möchten, gibt es einen anderen Ansatz, der möglicherweise besser (effizienter) ist. Sie können während save_post prüfen, ob der Autor eine Rolle zugewiesen hat, und diese in den folgenden Fällen als dauerhaft festlegen:

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

Haftungsausschluss: Dieser Code wurde nicht getestet, daher kann es zu Tippfehlern kommen. Aber die Idee ist klar, hoffe ich :)

1