web-dev-qa-db-ja.com

特定のユーザーロールがスティッキーポストの場合

ユーザーがユーザーロールの作者を持っている場合、彼の新しい投稿はすべて自動的にスティッキになります。

どうやってやるの?

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

ユーザーがユーザーロールauthorを持っていて、彼が新しい投稿を作成した場合、たとえフロントエンドの投稿作成​​者を使用していてもデフォルトでスティッキーになります。
作者が新しい投稿をした場合にのみ機能します。
この関数が追加される前に彼が作成した彼の古い投稿はスティッキーにはなりません。

0
ANdy

それは可能であるように見えます。

付箋は 'sticky_posts`と呼ばれるオプションにIDの配列として格納されています、そしてフックを使ってオプションを変更することができます。

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

一方、作者が書いた投稿をすべてスティッキーに設定したい場合は、もっと良い方法(より効率的)があるかもしれません。 save_postの間に作者がロールを与えたかどうかをチェックし、もしそうならばスティッキーとしてそれを設定することができます:

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

免責事項:このコードはテストされていないので、いくつかの誤字などがあるかもしれません。しかし、アイデアは明らかです、私は願っています:)

1