Автоматическая категоризация статей авторов в Wordpress - PullRequest
1 голос
/ 09 марта 2011

Пользователь WP с ролью «Автор» может публиковать статьи.В рассматриваемом блоге у меня есть требование, чтобы статьи этих пользователей были живы немедленно, но не были публично видны (то есть для анонимных посетителей или подписчиков).Мы используем WP 3.0.5.

У нас уже запущен плагин, который позволяет скрывать категории от анонимных и подписчиков.Итак, самый простой метод, который я придумала до сих пор: Новые сообщения в блоге авторов должны автоматически помещаться в категорию.Затем я скрываю эту категорию от анонимных пользователей.

Кто-нибудь знает:

a) как автоматически поместить статью "Автором" пользователей в определенную категорию, или

b) как можно более элегантно выполнить требование "живи, но не публично" для этих постов?

(предложения плагинов тоже приветствуются.)

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Что вы, вероятно, хотите сделать, это написать функцию для этого в файле 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');

Надеюсь, что это имеет смысл, и дает подсказку о том, как это сделать - боюсь, я не смог это проверить.

0 голосов
/ 15 марта 2011

Следующий код автоматически изменит сообщения, сделанные автором, на личные.

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

он фильтрует статус при сохранении записи, проверяет, кто автор из переменных записи, выбирает их первую роль и проверяет, является ли автор автором, если он есть, то возвращает «личное»в противном случае он возвращает естественный статус.Нет необходимости использовать категории, чтобы сделать это, когда вы можете сделать это прямо здесь.

...