NKCV #3: [WordPress] Custom Post Types

Cũng như các vấn đề “bắt buộc phải tìm hiểu” khác, Custom Post Types cũng là một khái niệm gây khó khăn cho mình trong khi chỉnh sửa một trang wordpress. Đây là website của đội bóng JSHercules lấy theme Premier. Theme này dành cho đội bóng, giải đấu,… nói chung là thể thao, kết hợp plugin SportPress. Ngoài Default Post Type của WordPress như Page và Post, sự kết hợp giữa theme và plugin còn cho ra đời các thể loại Post Type khác như Players, Staffs, Matches, Clubs.

Ví dụ như Post Type loại Players, admin có thể add, edit, remove cầu thủ hoặc hiển thị thông tin cầu thủ trên một trang bất kỳ nào đó. Nếu khi tạo Post bình thường bạn điền thông tin về Titlte, Content, Excerpt, Categories, Tag và Feature Image thì với loại Players, sẽ có thêm thông tin cần điền về quốc tịch, số áo, chiều cao, cân nặng, giải đấu đang chơi, CLB, tiểu sử và đủ thứ hầm bà lằng khác.

Đấy vấn đề là sau khi điền đủ thứ thông tin trên thì trang profile của cầu thủ vẫn trống trơn, chẳng có gì ngoài phần Quốc tịch mặc dù trang profile mẫu của Premier hiển thị rõ ràng và đẹp lắm cơ.

empty
Trang profile trống trơn
demo
trong khi ít ra nó phải như này

 

 

 

 

 

 

 

Sau khi tìm hiểu một chút thì mình biết được là wordpress có cơ chế là để tạo template cho một Custom Post Types bất kỳ thì chỉ cần tạo một trang php rồi đặt tên nó là single_{tênposttype}.php. Nghĩa là trong trường hợp này trang hiển thị nội dung profile của một cầu thủ bất kỳ sẽ được lấy template từ single_player.php.

Tìm hiểu thêm: https://codex.wordpress.org/Post_Type_Templates

Thế là tìm vào code của nó nghiên cứu, nghiên cứu chán chê rồi mới phát hiện code không chuẩn, thảo nào không hiển thị được. Ngoài việc không hiển thị thông tin cầu thủ còn hiển thị không đúng cả nội dung cần đăng nữa.

1. Thêm giá trị vào Array, nội dung trở lại

Ở đầu trang có gọi ra một instance $player thuộc SP_Player.

$player = new SP_Player( $post );

Ý đồ là sẽ sử dụng các tính chất thuộc SP_Player cho $player, để vào trong một mảng (Array), rồi sẽ hiển thị tất cả nội dung trong mảng đó ra web. Nhưng mà trong code thì các thuộc tính đó chỉ được gọi ra chứ chưa được cho vào trong mảng, trong mảng khi đó chỉ có phần Quốc tịch thôi.

Thú thực là kiến thức của mình về PHP cũng thuộc hạng gà qué thôi nên lúng túng rất lâu.

Phần đầu tiên là thêm thông tin số áo. Phần này khá đơn giản vì người dùng nhập trực tiếp con số vào:

//Lấy giá trị nhập vào
$number = get_post_meta( $post->ID, 'sp_number', true );

//Đưa vào trong mảng - common
$common[ __( 'Number', 'sportspress' ) ] = $number;

Phần thứ hai phức tạp hơn một chút, là thông tin về vị trí chơi của cầu thủ đó (Positions). Thông tin này thuộc taxonomy (tương tự khi điền category hoặc tag vậy, lại có thể có nhiều giá trị) nên không lấy trực tiếp được. Thì phương án là dư lày:

//Lấy giá trị nhập vào
$positions = get_the_terms( $post->ID, 'sp_position' );

//Hiển thị lên web
if ( $positions ):
 $position_names = array();
 foreach ( $positions as $position ):
 $position_names[] = $position->name;
 endforeach;
 $common[ __( 'Position', 'sportspress' ) ] = implode( ', ', $position_names );
 endif;

get_the_terms() là chức năng lấy thông tin hiển thị dạng taxonomy.

Tương tự là thông tin CLB và mùa giải.

Tìm hiểu thêm: https://developer.wordpress.org/reference/functions/get_the_terms/

Cuối cùng thì đã hiển thị được các thông tin đó.

full
Thông tin hiển thị

2. Hiển thị nội dung trong content field lên page

Trong phần code sẵn:

<?php the_content(); ?>

Khi hiển thị sẽ bị post chồng lặp tất cả nội dung đã điền từ ảnh, các thông tin cá nhân, trích dẫn, blah blah, mà mình thì chỉ muốn nó hiển thị nội dung trong content field thôi. Không biết gọi là gì, nó là cái này:

contentfield.JPG
Cái này gọi là content field phải không ta :”>

Nên mình sửa lại như thế này:

<?php   
   $content = get_post_field('post_content', $post->ID);
   echo $content; 
?>

get_post_field() là chức năng lấy thông tin từ một field trong wordpress, trong trường hợp này ‘post_content’ là thông tin trong phần khung lớn mình muốn lấy như hình ở trên. Nhưng mà tiếc là hiện giờ chưa cầu thủ nào có thông tin nên nó sẽ bị ẩn. Chỉ tình cờ phát hiện ra nên sửa luôn 😛

Tìm hiểu thêm: https://codex.wordpress.org/Function_Reference/get_post_field

Trả lời

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s

Blog tại WordPress.com.

Up ↑

Thạch Lan Hương

Mây là của trời, thôi để gió cuốn đi.

Keyskynguyen

Simple things

ashley vuong

Business student at Oulu University of Applied Science

Rau Cải Xanh

/sadalsuud/

Trang da diary

Vài điều linh tinh về Trang - và về thế giới của Trang.

Blog Chuyện Bâng Quơ

Muốn viết truyện hay phải liều viết truyện không hay trước đã.

Vân's Corner

Nơi chia sẻ vài thứ hay ho mà mình cực kì yêu thích :D

nguyen73gl

không có gì là không thể

Sora WD

Góc nhỏ để vày linh tinh

Zenle19's Blog

A Daydreammer. Don't let dreams be dream

Tran Thu Hang

Tình yêu chữa lành tất cả

Ngoc Anh Nguyen (Anna)

If You Want To Go Fast, Go Alone. If You Want To Go Far, Go Together

%d bloggers like this: