Целью этого плагина является получение страницы автора не только с его личными данными и списком его статей, но и с возможностью комментирования и всех остальных возможностей, присущих обычной странице или записи в блоге. Задача реализации таких возможностей возникла у пользователей плагина Список авторов 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; } |
Вот такой концепт.
1 комментарий: Идея плагина — «Полноценная страница автора» (Author’s Advanced Page)