在Wordpress中自动分类作者的文章

时间:2011-03-09 09:24:53

标签: wordpress plugins visibility categories article

具有“作者”角色的WP用户可以发布文章。在相关博客上,我有要求,这些用户的文章必须立即直播,但不公开(即,对于匿名访问者或订阅者)。我们使用WP 3.0.5。

我们已经有一个插件正在运行,允许匿名和订阅者隐藏类别。所以我到目前为止提出的最直接的方法是:作者的新博客文章应该自动放入一个类别中。然后我从匿名用户隐藏该类别。

有谁知道:

a)如何通过“作者”用户自动将文章放在某个类别中,或

b)如何为这些职位更优雅地实现“生活但不公开”的要求?

(也欢迎插件建议。)

2 个答案:

答案 0 :(得分:1)

您可能想要做的是在主题的functions.php文件中编写函数来执行此操作,然后在保存帖子时使用add_action来触发该函数。

例如:

function update_category_on_save($post_id) {
    // Get post
    $post = wp_get_single_post($post_id)
    // Map author IDs to category IDs
    $mapping = array(
        1 => array(123),
        2 => array(234),
    );
    // Update the post
    $new_category = $mapping[$post->post_author];
    $u_post = array();
    $u_post['ID'] = $post_id;
    $u_post['post_category'] = $new_category;
    // Only update if category changed
    if($post->post_category != $new_category[0]) {
        wp_update_post($u_post);
    }
}

add_action('category_save_pre', 'update_category_on_save');

希望这是有道理的,并给你一个关于如何做到这一点的暗示 - 我担心我无法测试它。

答案 1 :(得分:0)

以下代码会自动将作者发布的帖子更改为私人。

function change_author_posts_to_private( $post_status ) {
    // if the user is just saving a draft, we want to keep it a draft
    if ( $post_status == 'draft' )
        return $post_status;

    $this_user = new WP_User( $_POST[ 'post_author' ] );

    // this is assuming the user has just one role, which is standard
    if ( $this_user->roles[0] == 'author' )
        return 'private';
    else    
        return $post_status;
}
add_filter( 'status_save_pre', 'change_author_posts_to_private' );

它过滤保存后的状态,查看作者是谁来自post变量,获取他们的第一个角色并查看它是否是作者,如果是,则返回'private',否则返回自然状态。当你可以在这里直接进行时,无需使用类别。