Cách load page template từ thư mục con trong WordPress

Cập nhật lần cuối vào

Page template là một tính năng rất hữu ích của WordPress, bạn có thể tạo một trang kế thừa từ bất kỳ template nào mà giao diện hoặc plugin kèm theo. Mặc định thì WordPress chỉ load page template từ thư mục gốc của giao diện, kể từ phiên bản WordPress 3.4 thì hệ thống có hỗ trợ lấy page template từ sub folder một cấp. Bài viết này mình sẽ hướng dẫn cho các bạn cách load page template từ sub folder 2 cấp trở lên.

WordPress page template

Page template là một tập tin PHP bất kỳ trong giao diện, tập tin này có chú thích phần header như sau:

Page template Full Width

Mỗi giao diện thì có rất nhiều tập tin PHP, WordPress sẽ đọc toàn bộ các tập tin này và kiểm tra cú pháp trong phần header, nếu header đúng chuẩn thì sẽ load thành một page template để sử dụng. Do tính năng tự động tìm kiếm này nên WordPress chỉ hạn chế load page template từ thư mục gốc và thư mục con một cấp mà thôi, nếu đọc toàn bộ giao diện thì sẽ tốn thời gian nếu giao diện đó có dung lượng quá lớn.

Trong bài viết này, mình sẽ có một thư mục với đường dẫn hocwp-theme/custom/page-templates, bây giờ bạn vào trong thư mục này và tạo tập tin full-width.php với cú pháp header như trong hình ảnh bên trên. Trong đó hocwp-theme là tên thư mục giao diện của mình nhé.

Tiếp đến, bạn mở tập tin functions.php của giao diện lên và thêm vào đoạn code sau:

function hocwp_theme_page_templates( $post_templates ) {
	$dir = HOCWP_THEME_CUSTOM_PATH . '/page-templates';
	if ( is_dir( $dir ) ) {
		$files = scandir( $dir );
		foreach ( $files as $file ) {
			$info = pathinfo( $file );
			if ( isset( $info['extension'] ) && 'php' == $info['extension'] ) {
				$full_path = trailingslashit( $dir ) . $file;
				if ( ! preg_match( '|Template Name:(.*)$|mi', file_get_contents( $full_path ), $header ) ) {
					continue;
				}
				$post_templates[ 'custom/page-templates/' . $file ] = _cleanup_header_comment( $header[1] );
			}
		}
	}

	return $post_templates;
}

add_filter( 'theme_page_templates', 'hocwp_theme_page_templates' );

Trong đó, hằng số HOCWP_THEME_CUSTOM_PATH là đường dẫn đến thư mục custom của mình. Mình sẽ đọc toàn bộ tập tin PHP trong thư mục này, sau đó kiểm tra nếu có cú pháp của header là một page template thì thêm vào danh sách page template của WordPress. Chúc bạn thành công.

5/5 - (1 bình chọn)
Theo dõi
Thông báo của
guest

0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận