Làm website đọc truyện online đơn giản cho wordpress

Về một số tính năng cơ bản như truyện gốc, chapter thì đáp ứng được. Để xây dựng, phát triển lâu dài hoặc làm một web truyện chuyên chuyện thì còn thiếu nhiều lắm. Nên bạn nào thích thì test thử cho vui nha.

Làm website đọc truyện online đơn giản cho wordpress
Hình ảnh chỉ mang tính minh họa =))

1, Phân tích dữ liệu cần có.

– Một trang truyện đọc thì nó cần có những gì?

  • Thể loại truyện (Truyện cười, truyện kinh dị, truyện 18+…).
  • Các tập truyện (Truyện A, truyện B, truyện C).
  • Truyện (Chương 1, chương 2…).

– Vậy trong một bộ truyện thì cần có những gì?

  • Ảnh bìa của truyện.
  • Giới thiệu, mô tả.
  • Các chương của truyện.
  • Các trang chuyện phụ lục.

Một trang truyện cơ bản cần đáp ứng được những chức năng trên, có thể là hơi nhiều nhưng mà vẫn chưa ăn thua gì so với những trang web đọc truyện online chuyên nghiệp bây giờ.

2, Hướng giải quyết các vấn đề nêu trên

– Thể loại truyện: Phần này chúng ta có  thể dùng chính các danh mục (Category)  làm mặc định thể loại truyện khác nhau.

– Các tập truyện: Phần này chúng ta dùng chính các Post mặc định của wordpress để làm, phần giới thiệu, mô tả và ảnh bìa của truyện chúng ta sẽ thêm vào đây.

– Nội dung truyện: Đây là phần chứa nội dung truyện cần đọc, các chương các chapter, phần này chúng ta sẽ sử dụng một Custom Post Type của wordpress để tạo, ở đây mình sẽ tạo một post type mới mang tên Story còn đặt tên gì là tùy ở các bạn.

3, Tạo Post Type mới và kết nối Post với Post type mới tạo

– Bước đầu tiên chúng ta sẽ phải đăng ký một Custom Post Type mang tên “Story” mà mình đã nói ở trên, để làm được điều này các bạn cần edit file functions.php có trong theme wordpress mà các bạn đang sử dụng sau đó chèn đoạn code này vào như sau.

//Tạo cái story
add_action( ‘init’, ‘create_post_type’ );
function create_post_type() {
register_post_type( ‘story’,
array(
‘labels’ => array(
‘name’ => ‘Story’,
‘singular_name’ => ‘Story’
),
‘show_ui’ => true,
‘public’ => true,
‘has_archive’ => true,
‘taxonomies’    => array(‘post_tag’),
‘rewrite’ => array(‘slug’ => ‘story’, ‘with_front’ => FALSE),
‘supports’ => array( ‘title’, ‘editor’, ‘author’, ‘excerpt’, ‘comments’ )
)
);
}
Sau khi tạo xong phần này các bạn vào quản lý (admincp) của bạn sẽ thấy hiện thị thêm một post mới có các chức năng tương tự như post mặc định mang tên Story.

Sẽ có thêm một rewrite_rules dạng domain/story/tieu-de.html cho nên bạn cần phải vào Settings -> Permalink để cập nhật lại đường dẫn nếu không sẽ bị lỗi 404 đấy nhé. Như vậy là đã xong phần tạo nơi để đăng nội dung từng chương truyện vậy tiếp theo làm thế nào để từng chương truyện nhận ra từng post truyện mô tả của nó?

– Kết nối Post type mới tạo với Post mặc định: Post type Story mà chúng ta vừa tạo cũng chỉ là phần ngoài cuộc cho nên chúng ta cần phải kết nối nó với post mặc định của wordpress điều này sẽ khiên cho truyện A nó nhận đúng chương của truyện A và tương tự như vậy, để làm điều này ta cần phải thêm thuộc tính điền tên truyện gốc trong bài viết tại Post type Story chúng ta mới tạo, các bạn sử dụng đoạn code sau đây, vẫn cho vào functions.php nhé.

add_action( ‘edit_form_after_title’, ‘mystoryparrent’ );
function mystoryparrent( $post_data = false ) {
$scr = get_current_screen();
$value = ”;
if ( $post_data ) {
$t = get_post($post_data);
$a = get_post($t->post_parent);
$value = $a->post_title;
}
if ($scr->id == ‘story’)
echo ‘<label>Thuộc truyện: <input type=”text” name=”parent” value=”‘.$value.'” /></label> (Tên của cuốn truyện gốc)<br /><br />’;
}

Sau khi thêm code xong chúng ta vào phần Story và ấn thêm bài viết sẽ thấy như sau.

Như vậy đã có thêm phần thêm tên của truyện gốc, truyện gốc ở đây chính là tiêu đề truyện bạn thêm bên Post mặc định (Phần giới thiệu tác giá cũng như mô tả truyện).

– Tiếp theo chúng ta phải làm cho 2 thứ này liên kết với nhau, ở đây mình sử dụng post_parent để làm điều này, các bạn tiếp tục thêm vào functions.php như sau.

add_action( ‘save_post’, ‘save_mystory’ );
function save_mystory( $post_id ) {
$story = isset( $_POST[‘parent’] ) ? get_page_by_title($_POST[‘parent’], ‘OBJECT’, ‘post’) : false ;
if ( ! wp_is_post_revision( $post_id ) && $story ){
remove_action(‘save_post’, ‘save_mystory’);
$postdata = array(
‘ID’ => $_POST[‘ID’],
‘post_parent’ => $story->ID
);
wp_update_post( $postdata );
add_action(‘save_post’, ‘save_mystory’);
}
}

Như vậy là đã giải quyết xong vấn đề, giờ bạn thử tạo một bài viết mới ở post mặc định là truyện A sau đó vào Story thêm một post mới với nội dung chương 1 của truyện A và ở phần tên cuốn truyện gốc bạn điền là truyện A thì chương đó sẽ nhận ra nó là 1 chương của truyện A.

4, Phân trang cho phần đọc truyện

– Về cơ bản là ở phần mỗi chương truyện khi post bài các bạn nên để tiêu đề theo số thứ tự và để mặc định URL luôn ví dụ như mình ở đây sẽ thêm như sau.

Như vậy sau này khi thêm nhiều truyện thì vấn đề lẫn lộn chương không theo thứ tự sẽ không xảy ra.

– Tiếp đến chúng ta sẽ show menu dropdown ra ngoài phần chương truyện để người đọc có thể chọn từ chương này qua chương khác một cách đơn giản, tiếp tục thêm vào functions.php nội dung như sau.

function get_dropdown_part( $id ) {function get_dropdown_part( $id ) { global $post, $wpdb; $query = $wpdb->get_results(sprintf(‘select * from %s where post_type = \’%s\’ and post_parent = %d and post_status = \’%s\’  order by post_date asc’, $wpdb->posts, ‘story’, $id, ‘publish’)); if ($query) { echo ‘<form id=”selectpart”> <select name=”part” onchange=”window.location.href = (this.options[this.selectedIndex].value)”><option value=””>- Chọn tập -</option>’; foreach ( $query as $k ) { $uri = get_permalink($k->ID); if ( ! preg_match(‘/.*page-[0-9].*/’, $uri)) echo ‘<option value=”‘.$uri.'”>’.$k->post_title .'</option>’; } echo ‘</select></form>’; } }

Sau khi thêm xong đoạn code này chúng ta cần thực hiện bước tiếp theo đó là show menu dropdown này ra phần bài viết mà bạn cần, ở đây thường là chúng ta sẽ tìm đến file single.php và thêm đoạn code sau ngay phía trên get_template_part

<?php if ( get_post_type() == ‘story’) {
printf( ‘<p><a href=”%s”>%s</a></p>’, get_permalink($post->post_parent), get_the_title($post->post_parent));
get_dropdown_part($post->post_parent);
} ?>

Kết quả sẽ được như sau.

Như vậy chúng ta có thể hoàn thiện một số tính năng cho một website đọc truyện online đơn giản bằng  wordpress. Các bạn có thể tham khảo thêm Demo để tham khảo thêm nhé.

======> Giải pháp hoàn hảo cho website truyện

Chúc các bạn thành công!

Leave a Comment