Chào các bạn, hôm trước có một bạn nhờ mình check theme này:

https://sharecode.vn/source-code/share-code-truyen-chu-wordpress-giao-dien-giong-truyenfullvn-15886.htm

Thì mình cũng mất cả buổi chiều mới viết ra cách để KDN Auto Leech làm việc trên theme đó.

Tuy nhiên trước khi đi vào vấn đề chính thì mình review lại 1 chút. Theme này sử dụng Taxonomy để lưu Truyện  lưu các thông tin Truyện vào option, điều mà không hề nên làm chút nào và nó không phù hợp với công nghệ bây giờ nữa. Tuy nhiên, bạn nào có sử dụng hệ thống tương tự như này thì có thể tham khảo cách mình làm sau:

/**
 * KDN Auto Leech
 * Cấu trúc của theme này như sau:
 * - Sử dụng taxonomy: category để làm Truyện (mỗi Truyện là 1 Term)
 * - Thông tin của Truyện (metabox của Term) chính là wp_option với tên option theo dạng: category_X (trong đó X là ID của Term)
 * - Sử dụng post_type: post để làm Chương
 * - Gán các Chương vào Truyện bằng cách chọn Term (Truyện) trong taxonomy: category
 * 
 * Giải quyết vấn đề:
 * - Thu thập như bình thường với Bài viết cha và Bài viết con đều dùng post_type: post
 * - Khi thu thập Bài viết cha: Lúc này Bài viết cha đóng vai trò là nơi chứa các thông tin để tạo ra Truyện
 * - Khi thu thập Chương 1: Lúc này tạo ra Truyện (Term) trong taxonomy: category với các thông tin của Bài viết cha
 * 							+ Tiêu đề của Term 	= Tiêu đề của Bài viết cha
 * 							+ Mô tả của Term 	= Nội dung của Bài viết cha
 * - Khi thu thập Chương N: Lúc này kiểm tra xem đã có Truyện (Term) hay chưa, nếu đã có thì chỉ việc set Term_ID vào Chương là xong:
 * 							+ Kiểm tra bằng cách tìm Term có Tiêu đề của Term trùng với Tiêu đề của Bài viết cha
 *                            (nếu có hãy lấy ra Term_ID)
 */
add_action('kdn/post/finished', 'finished_post', 10, 10);
function finished_post($data, $postData, $postBot, $postSaver, $siteId, $postUrl, $urlTuple, $isRecrawl, $postId, $isFirstPage) {
	
	// Lấy ID của Bài viết cha
	$parentId = wp_get_post_parent_id($postId) ?: 0;
	
	// Nếu có ID bài viết cha, có nghĩa rằng đang thu thập Bài viết con
	if ($parentId) {
		
		// Lấy: Data của bài viết cha
		$parentData = get_post($parentId);
		
		// Lấy: Tên truyện là Tiêu đề của Bài viết cha
		$termName 	= $parentData->post_title;
		
		// Lấy: ID của Truyện (Term) thông qua Tên truyện
		$termId 	= get_term_by('name', $termName, 'category')->term_id;
		
		// Nếu không có ID của Truyện (Term) (tức là Truyện chưa có sẵn và đây đang là thu thập "Chương 1")
		// tiến hành tạo Truyện (Term) mới
		if (!$termId) {
			
			/******************************************************
			 * BẮT ĐẦU: TẠO TRUYỆN MỚI
			 ******************************************************/
			
			// Chuẩn bị $termData
			$termData = [
				'description' => $parentData->post_content		// Mô tả của Term (chính là mô tả của Truyện)
			];
			
			// Tiến hành thêm Truyện (Term) mới vào taxonomy: category và lấy ra ID của Truyện (Term ID)
			$termId = wp_insert_term($termName, 'category', $termData)['term_id'];
			
			/******************************************************
			 * KẾT THÚC: TẠO TRUYỆN MỚI
			 ******************************************************/
			
			
			
			
			
			/******************************************************
			 * BẮT ĐẦU: TẠO THÔNG TIN CHO TRUYỆN
			 ******************************************************/
			
			// Chuẩn bị $optionName theo dạng: category_X (trong đó X là ID của Truyện (Term ID đã lấy ra ở trên))
			$optionName = 'category_' . $termId;
			
			// Chuẩn bị dữ liệu cho $optionValue
			
			// Lấy post meta tacgia của Bài viết cha
			$tacgia		= get_post_meta($parentId, 'tacgia', true);
			
			// Lấy post meta tinhtrang của Bài viết cha
			$tinhtrang 	= get_post_meta($parentId, 'tinhtrang', true) == 'Full' ? 'hoanthanh' : '';
			
			$theloai 	= get_post_meta($parentId, 'theloai');
			
			$listTheLoai = [];
			
			if ($theloai) {
				foreach ($theloai as $tl) {
					$tlID = get_term_by('name', $tl, 'the-loai')->term_id;
					if ($tlID) {
						$listTheLoai[] = $tlID;
					} else {
						$tlID = wp_insert_term($tl, 'the-loai')['term_id'];
						$listTheLoai[] = $tlID;
					}
				}
			}
			
			// Lấy URL ảnh đại diện của Bài viết cha
			$anhdaidien = get_the_post_thumbnail_url($parentId, 'full');
			
			// ...
			
			// Chuẩn bị $optionValue với các dữ liệu ở trên
			$optionValue = [
				'tacgia' 					=> $tacgia,
				'tinhtrang'					=> $tinhtrang,
				'anhdaidien'				=> $anhdaidien,
				'nguon'						=> '',
				'theloai'					=> $listTheLoai,
				'nhomdich'					=> '', // ['194' => '194']
				'hot'						=> '',
				'tieubieu'					=> '',
				'luotxem'					=> '',
				'img'						=> '',
				'seo_met_title'				=> '',
				'seo_met_keywords'			=> '',
				'seo_met_description'		=> ''
			];
			
			// Tạo wp_option tương ứng với ID của Truyện (Term)
			update_option($optionName, $optionValue);
			
			/******************************************************
			 * KẾT THÚC: TẠO THÔNG TIN CHO TRUYỆN
			 ******************************************************/
			
			// Gán ID của Chương (Post) vào Truyện (Term) vừa tạo
			wp_set_post_terms($postId, [$termId], 'category');
			
		// Nếu đã có ID của Truyện (Term) (tức là Truyện đã có sẵn và đây đang là thu thập từ "Chương 2" trở đi)
		} else {
			// Gán ID của Chương (Post) vào Truyện (Term) có sẵn
			wp_set_post_terms($postId, [$termId], 'category');
		}
	}
}

Như các bạn thấy thì ở trên kia mình đã lưu các thông tin Truyện vào post meta rồi sau đó truy xuất các post meta này để lấy giá trị và đem giá trị đó gán vào các option category_X sau khi finished post.

Dưới đây là hình ảnh cấu hình các post meta:

Đó là ý tưởng và các thông tin Truyện khác bạn hãy làm tương tự. Chúc thành công! 🙂


0 Bình luận

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *