如果是特定用户角色,则发布粘性帖子

时间:2018-05-23 作者:ANdy

我们说,如果一个用户拥有用户角色作者,那么他的所有新帖子都会自动变得粘滞。

我该怎么做?

2 个回复
最合适的回答,由SO网友: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 );
    }
}
如果用户具有用户角色“作者”,并且他创建了一篇新文章,那么即使他使用了某个fron-end-post-creator,默认情况下也会变得很粘滞
只有当作者写了一篇新文章时,它才会起作用
他在添加此功能之前创建的旧帖子不会变得有粘性。

SO网友:Krzysiek Dróżdż

看起来这是可能的。

Sticky posts作为ID数组存储在名为“Sticky\\u posts”的选项中,您可以使用挂钩修改选项,以便。。。这样的事情很有可能奏效:

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\' );
免责声明:此代码未经测试,所以可能有一些拼写错误等。但我希望想法很清楚:)

结束

相关推荐

为内置钩子调用do_action和Apply_Filters是否安全?

我正在开发一个插件,它需要复制一些内置的WordPress逻辑。(此逻辑不能用任何内置方法调用,也不能独立连接到。)在这个动作序列中,WordPress的正常行为是调用动作挂钩(do_action(\'wp_login\', ...)) 和过滤器挂钩(apply_filters(\'login_redirect\', ...)).如果在对应于在Core中调用它们的时间点调用它们,那么直接从我的插件调用这些内置钩子是否安全(并且是可以接受的做法)?或者,其他与此相关的开发人员期望在非常特定的时间执行操作的风