Идея плагина — «Полноценная страница автора» (Author’s Advanced Page)

Целью этого плагина является получение страницы автора не только с его личными данными и списком его статей, но и с возможностью комментирования и всех остальных возможностей, присущих обычной странице или записи в блоге. Задача реализации таких возможностей возникла у пользователей плагина Список авторов WordPress. Подобные вопросы встречались в инете, но решения не предлагалось.

В этой заметке я хочу просто обозначить вариант реализации. Дело в том, что комментарии привязываются к ID записи (comment_post_ID) и для того, что бы выводить комментарии на странице автора, эта страница должна быть внесена в wp_posts и иметь свой уникальный ID.

Вариант довольно банальный, но работоспособный. Вы можете не дожидаться плагина, а внести изменения в пару файлов и на персональной странице авторов можно установить комментарии, рейтинги и все остальное. Возможно, этот вариант подойдет не для всех случаев. Жду пожеланий и замечаний, что бы их можно было учесть при написании плагина.

Первым делом я создал свой тип записей (Custom Post Type), для этого в functions.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    add_action( 'init', 'create_myauthor_post_type' );
    function create_myauthor_post_type() {
        register_post_type( 'myauthor',
            array(
                'labels' => array(
                    'name' => __( 'Author Pages' ),
                    'singular_name' => __( 'Author Page' )
                ),
            'public' => true,
            'has_archive' => false,
            'show_ui' => false,
            'show_in_menu' => false,
            'rewrite' => true,
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
            )
        );
    }

Далее в файле author.php после списка постов (обычно после строки ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Получаем $user_ID
$user_ID = get_the_author_meta('ID');
//Придумываем уникальное имя поста (slug), которое используется для Url
$post_name = "my-author-".$user_ID;
//разрешаем комменты
global $withcomments;
$withcomments = true;
//Получаем ID поста.
$my_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$post_name."' AND post_type = 'myauthor'");
//Если такого еще нет, придется внести
if( !$my_id ){
 $post = array(
    'comment_status' => 'open',  // комментарии разрешены
    'post_author' => $user_ID, // автор поста
    'post_content' => "", // пусто
    'post_name' => $post_name, // slug
    'post_status' => 'publish', // опубликовано
    'post_title' => get_the_author_meta('user_login'), // заголовок возьмем user_login
    'post_type' => "myauthor"
  );                       
  $my_id = wp_insert_post($post);
}
//получим полностью пост
$post = get_post( $my_id );
// устанвовить $post текущим (добвляется в глобальный и прочие)
setup_postdata($post);                 
//Выводим комменты и форму
comments_template( '', true );

Теперь осталось вернуться в functions.php и исправить редирект, что бы пользователя возвращало на страницу автора.

1
2
3
4
5
6
7
8
9
10
11
    add_filter('comment_post_redirect','change_redirect',10,2);
   
    function change_redirect( $url, $comment ){
        $post = get_post( $comment->comment_post_ID );

        if( $post->post_type == 'myauthor' ) {
            $url = "/author/".$post->post_title."/#comments";

        }
        return $url;
    }

Вот такой концепт.

Об авторе AlexeyBalin

Error: Не могу создать директорию wp-content/uploads/2017/07. Проверьте, доступна ли родительская директория для записи.
Разрабатываю систему Социального поиска FASQu. Поддерживаю большое количество сайтов, работающих на выделенных серверах и виртуальных хостинг-аккаунтах.


Запись опубликована в рубрике Программирование с метками , . Добавьте в закладки постоянную ссылку.


Поделиться с друзьями




1 комментарий: Идея плагина — «Полноценная страница автора» (Author’s Advanced Page)

  1. Дима говорит:

    Отлично ждём плагина!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *