Làm thế nào để tạo Custom Post Type WordPress

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Làm thế nào để tạo Custom Post Type WordPress Custom Post Type WordPress sẽ giúp bạn kiểm soát nội dung hiển thị. Nếu bạn viết một bài blog post cá nhân, bạn có thể tạo layout cho chỉ những bài này. Nếu bạn viết về bình luận phim hoặc nhạc, bạn cũng có thể thêm khu vực nội dung mới cho các bài post đó để tách biệt so với bài post thông thường.

Giới thiệu

Trong bài chỉ dẫn này, chúng tôi sẽ tạo plugin để thêm 2 custom post type vào WordPress. Sau đó chúng tôi sẽ tạo layout mới cho cả 2 bằng cách dùng templates. Nếu bạn cần biết cách làm thế nào để tạo WordPress plugin, hãy xem thêm thêm bài viết này.

Chúng mình cũng sẽ kích hoạt tính năng  Custom Field  của post editor cho từng bài viết, và hiển thị trường này trong template mới.

Custom Post Type WordPress sẽ giúp bạn khống chế cách nội dung hiển thị. Nếu bạn viết một bài blog post cá nhân, bạn cũng đều có thể tạo layout cho chỉ những bài này. Nếu bạn viết về bình luận phim hoặc nhạc, bạn cũng đều có thể thêm khu vực nội dung mới cho những bài post đó để nó không xuất hiển thị trên blog post của bạn.

Nhưng trước lúc bắt đầu, hãy cùng tìm hiểu xem custom post types trong WordPress là gì.

Custom Post Type WordPress là gì?

Nói ngắn gọn thì custom post type WordPress sẽ cho phép bạn tạo bài viết theo nội dung khác với Page và Post để tiện phân loại. Trong WordPress, mặc định các post types là Post, Page, Attachment, vâng vâng.

Thông thường bạn cần viết tất cả bài viết trong mục Posts trong Admin Control Panel wordpress, rồi phân loại chúng bằng Category. Bài viết trong từng loại sẽ hiển thị trong và một danh sách, vì vậy cực khó để phân biệt giữa chúng.

Custom post type có link riêng ở trong admin control panel, giúp tạo nên bản kê của các bài viết và một loại. Posts được tạo bằng cách này cũng cũng đều có thể được gắn vào category phù hợp, vì vậy bạn có toàn quyền chỉnh sửa loại category nó đang được gắn và sắp xếp theo phương pháp bạn thích. Hãy nhìn qua về việc chúng tôi tạo nên 2 Custom Post Type WordPress là Movies và Movie Reviews bên dưới: danh sách post type 

Movies là các bài post về Phim, còn Movie Reviews là các bài post về Bình Luận Phim.

Ở thí dụ trên, nếu người dùng tới phần Movie, cái bài viết về bình luận sẽ không nằm trong này. Nhưng nếu tạo một categories để phân loại như ‘Action’ và ‘Romance’, người dùng có thể di chuyển tới trang category để tìm tất cả phim Action và xem tất cả bài viết bình luận phim trong category đó.

Khi tạo một post type mới, bạn có nhiều cách như là link của post type nên hiện ở đâu, loại post type đó hiện trong search result, hỗ trợ đoạn trích hoặc comments hay không, vâng vâng.

Bạn cũng đều có thể đổi nhiều loại text (định nghĩa trong array $labels ), như là đổi Add New Post thành Add New Movie .  Ví dụ, bạn có thể thay tên Featured Image thành Add Poster .

Bạn cũng cũng có thể có thể kích hoạt custom fields feature trong post editor bằng Screen Option trên cùng của editor, nó bị ẩn đi mặc định.

Tiếp tục quay về với ví dụ về Movies và Movie Reviews, một Movie post cũng có thể được thêm các trường như là ngày phát hành, đạo diễn, IMDB rating,… với một trích đoạn ngắn nội dung trong bài viết. custom post field wordpress

Thông thường, bất kỳ custom field nào bạn tạo ra đều cũng có thể có thể được chọn trong mỗi loại post, vì vậy, bạn phải dùng plugin để hạn chế việc các trường này hiện lên.

Cách tạo Custom Post Type WordPress

Khi tạo thay đổi lớn trong WordPress, bạn nên tạo một plugin. Bạn cũng đều có thể tạo custom post types WordPress trong file functions.php của theme. Trong bài chỉ dẫn này, chúng tôi sẽ tạo một plugin và sử dụng nó để tạo ra WordPress custom post type cho ví dụ về Movie Database/ Review bên trên.

Để tạo WordPress custom post type, bạn phải viết một function gọi hàm WordPress có tên register_post_type() với 2 tham số. Function phải bị hook vào init action hook, nếu không, custom post type sẽ chưa được đăng ký đúng.

 // The custom function MUST be hooked to the init action hook add_action( 'init', 'lc_register_movie_post_type' ); // A custom function that calls register_post_type function lc_register_movie_post_type() { // Set various pieces of text, $labels is used inside the $args array $labels = array( 'name' =>  _x( 'Movies', 'post type general name' ), 'singular_name' =>  _x( 'Movie', 'post type singular name' ), ... ); // Set various pieces of information about the post type $args = array( 'labels' =>  $labels, 'description' =>  'My custom post type', 'public' =>  true, ... ); // Register the movie post type with all the information contained in the $arguments array register_post_type( 'movie', $args ); } 

Tất cả những custom function nên có prefixed để tránh xung đột với các plugins hoặc themes functions khác. Chúng tôi sẽ dùng prefix này cho bài chỉ dẫn – LC.

2 tham số cho register_post_type() là:

  1. Tên của post type, nhiều nhất 2o ký tự và không chứa khoảng trắng hoặc chữ in hoa
  2. Một associative array mang tên $args chứa tin tức về post type trong cặp ‘key’ => ‘value’

Vì cả arguments và labels đều là arrays, sẽ tốt hơn nếu để biến riêng của label, rồi biến cho $args , rồi gọi hàm này.

Array $args

Các keys phổ biến nhất của array $args ở bên dưới, không có khóa nào là bắt buộc:

  • labels array định nghĩa nhiều loại văn bản, ví dụ  ‘Add New Post’ cũng có thể có thể đổi thành ‘Add New Movie’. Khóa của labels array được giải thích bên dưới bản kê này.
  • description – Mô tả ngắn về loại post type, có thể được hiển thị trong post type template nhưng vẫn không được sử dụng ở nơi khác.
  • public – Post type có hiện cho người sáng tác và cách truy cập không, mặc định giá trị đây là FALSE có nghĩa là nó không hiện lên trong phần Admin Control Panel.
  • exclude_from_search – loại post này còn có hiện lên kết quả tìm kiếm hay không. Giá trị mặc định là trái lại với mức giá trị của public.
  • publicly_queryable – loại post này còn có được query trong URL như là http://www.mywebsite.com/?post_type=movie hay không, hoặc trong cách sử dụng nâng cao thì sử dụng qua function query_posts(). Giá trị mặc định là giá trị public
  • show_ui – menu link và post editors có hiển thị trong Admin Control panel hay không. Giá trị mặc định là giá trị của public
  • show_in_nav_menus – Post của loại này cũng có thể có thể được thêm vào menu điều hướng hay là không bằng cách tạo trong Appearance -> Menus. Giá trị mặc định là giá trị public.
  • show_in_menu – Post type link có hiện trong thanh điều hướng của Admin Control Panel hay không. FALSE sẽ ẩn link đi. TRUE sẽ tạo link lên đầu. Nhập một chuỗi vào sẽ giúp bạn đặt link như là sub-link của 1 link ngoài cùng. Ví dụ, nhập options-general.php sẽ đặt link này bên dưới link Settings.
  • show_in_admin_bar – Post type này còn có hiện trên thanh Admin ở trên cùng không, ngay chỗ link + New
  • menu_position – Vị trí của link mới trong menu điều hướng của Admin Control Panel, “5” sẽ đặt nó dưới Post, 100 sẽ đặt chúng dưới Settings, truy cập WordPress Codex để lấy tin tức thêm về các địa thế này
  • hierarchical – posts có thể được gắn vào Parent post không, nếu là TRUE, $supports array phải chứa tính năng ‘page-attributes’
  • supports – bổ trợ có chọn lọc nhiều tính năng như là featured images, excerpts, custom fields, vâng vâng. Nếu bị đặt thành FALSE thay vì array, nó sẽ vô hiệu editor cho loại post type này – hữu dụng khi bạn mong muốn khóa mọi thứ các post mà vẫn giữ chúng hiển thị (danh sách giá trị của array bên dưới)
  • taxonomies – một array của taxonomies cũng có thể được áp dụng vào loại post type này, taxonomies phải được đăng ký trước – cái này không tạo ra taxonomies mới!
  • has_archive – post type có trang archive page hay không, url sẽ dùng cấu trúc của permanlink của bạn, và slug là tên bạn điền vào trong tham số 1 của register_post_types(). Ví dụ http://www.mywebsite.com/movie_reviews/ hiển thị tất cả những post về movie reviews
  • query_var   – TRUE hoặc FALSE sẽ kiểm soát post cũng có thể được xem bằng phương pháp gõ post type và post name trong query của URL hay không. Ví dụ ‘http://www.mywebsite.com/? movie = the-matrix ‘. Nếu bạn điền một chuỗi ký tự, bạn cũng có thể có thể đặt text để dùng sau ký tụ ?, vì thế điền film sẽ có thể cho ra kết quả ‘? film = the-matrix ‘.

Toàn bộ bản kê cũng có thể tìm thấy tại đây WordPress Codex page for register_post_type().

Labels array

Khóa đầu tiên trong $args có tên là labels và cần là array. Nó khái niệm nhiều loại văn bản liên quan đến custom post type WordPress. Vì chứa nhiều thông tin, tốt nhất là ta nên tạo biến $labels để chứa nó. Ví dụ code sau sẽ giúp bạn dễ hình hơn.

Bên dưới là một số khóa quan trọng của labels array này, tất cả đều không bắt buộc:

  • name – Tên của post type (ví dụ: movies)
  • singular_name – Tên của 1 bài post của loại này, tỉ dụ movie
  • add_new – Thay thế ‘Add New’ text, ví dụ  ‘Add Movie’
  • add_new_item – Thay thế ‘Add New Post’ , thí dụ ‘Add New Movie’
  • edit_item – Thay thế ‘Edit Post’ ví dụ ‘Edit Movie’
  • featured_image – Thay thế ‘Featured Image’ trong post editor, thí dụ ‘Movie Poster’
  • set_featured_image –  Thay thế ‘Set Featured Image’ . Ví dụ . ‘Add Movie Poster’
  • menu_name – Đổi chữ của link trên cùng, mặc định text của link là tên khóa

Toàn bộ bản kê cũng có thể có thể tìm thấy tại đây WordPress Codex page for register_post_type().

‘supports’ Array

 // Enable specific features in the post editor for my post type $supports = array ( 'title', 'editor', 'author', 'thumbnail' ); // Disable ALL features of the post editor for my post type $supports = FALSE; 

Một trong các khóa của $args array được đặt tên là supports . Đây là một array đơn giản nơi bạn viết ra danh sách của post editor nào bạn mong muốn kích hoạt cho custom post type. Mặc định, chỉ có title và editors được kích hoạt.

Bạn cũng cũng đều có thể đổi thành FALSE thay cho 1 array, để vô hiệu toàn bộ tính năng biên tập như là title và phần nội dung. Có tức là bài viết chẳng thể được chỉnh sửa, nhưng vẫn cũng có thể có thể hiển thị.

Danh sách tính năng của post editor bạn có thể kích hoạt trong array $supports :

  • title
  • editor
  • author – GHI CHÚ: cho phép thay đổi author của bài viết
  • thumbnail
  • excerpt
  • trackbacks
  • custom-fields
  • comments
  • revisions
  • page-attributes
  • post-formats

Tạo Custom Post Type trong WordPress bằng Plugin

Giờ bạn đã biết thông tin nào cần cho hàm này, bạn cũng đều có thể dựng plugin, viết hàm, và hook chúng vào action hook init .

  <?php /* Plugin Name: My Custom Post Types Description: Add post types for movies and movie reviews Author: Liam Carberry */ // Hook   lc_custom_post_movie()   to the init action hook add_action( 'init', 'lc_custom_post_movie' ); // The custom function to register a movie post type function lc_custom_post_movie() { // Set the labels, this variable is used in the $args array $labels = array( 'name' =>  __( 'Movies' ), 'singular_name' =>  __( 'Movie' ), 'add_new' =>  __( 'Add New Movie' ), 'add_new_item' =>  __( 'Add New Movie' ), 'edit_item' =>  __( 'Edit Movie' ), 'new_item' =>  __( 'New Movie' ), 'all_items' =>  __( 'All Movies' ), 'view_item' =>  __( 'View Movie' ), 'search_items' =>  __( 'Search Movies' ), 'featured_image' =>  'Poster', 'set_featured_image' =>  'Add Poster' ); // The arguments for our post type, to be entered as parameter 2 of register_post_type() $args = array( 'labels' =>  $labels, 'description' =>  'Holds our movies and movie specific data', 'public' =>  true, 'menu_position' =>  5, 'supports' =>  array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ), 'has_archive' =>  true, 'show_in_admin_bar' =>  true, 'show_in_nav_menus' =>  true, 'has_archive' =>  true, 'query_var' =>  'film' ); // Call the actual WordPress function // Parameter 1 is a name for the post type // Parameter 2 is the $args array register_post_type( 'movie', $args); } // Hook   lc_custom_post_movie_reviews()   to the init action hook add_action( 'init', 'lc_custom_post_movie_reviews' ); // The custom function to register a movie review post type function lc_custom_post_movie_reviews() { // Set the labels, this variable is used in the $args array $labels = array( 'name' =>  __( 'Movie Reviews' ), 'singular_name' =>  __( 'Movie Review' ), 'add_new' =>  __( 'Add New Movie Review' ), 'add_new_item' =>  __( 'Add New Movie Review' ), 'edit_item' =>  __( 'Edit Movie Review' ), 'new_item' =>  __( 'New Movie Review' ), 'all_items' =>  __( 'All Movie Reviews' ), 'view_item' =>  __( 'View Movie Reviews' ), 'search_items' =>  __( 'Search Movie Reviews' ) ); // The arguments for our post type, to be entered as parameter 2 of register_post_type() $args = array( 'labels' =>  $labels, 'description' =>  'Holds our movie reviews', 'public' =>  true, 'menu_position' =>  6, 'supports' =>  array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ), 'has_archive' =>  true, 'show_in_admin_bar' =>  true, 'show_in_nav_menus' =>  true, 'has_archive' =>  true ); // Call the actual WordPress function // Parameter 1 is a name for the post type // $args array goes in parameter 2. register_post_type( 'review', $args); } 

Nếu bạn kích hoạt plugin này, bạn sẽ thấy 2 link mới trong Admin Control Panel, ngay bên dưới Posts link.

Di chuột vào bạn sẽ thấy sub-link là “View All’ và ‘Add New’, chữ này được định nghĩa trong array $labels . Hãy nhìn qua thử editor xem những labels đã được thay đổi như thế nào.

Hạn chế Custom Fields cho một post type nhất định

Khi thêm custom field vào một bài post, field được lưu lại để bạn có thể nhanh chóng thêm nó vào bất kỳ bài viết mới nào. Custom field bạn vừa thêm sẽ hiện trong bản kê drop down trên mỗi bài viết. Việc này khiến bạn gặp khó khăn trong việc tìm đúng trường. Nếu bạn mong muốn giới hạn custom fields để chỉ có thể chọn trong 1 bản kê nhất định, cách dễ dàng nhất là sử dụng plugin.

Advanced custom fields plugin thêm một editor đơn giản vào WordPress để giúp bạn tạo custom fields và cài đặt sao cho nó chỉ hiện lên trong post của bạn.

Bạn có thể thiết lập loại input nào của trường, như là text box, text area, email address, vâng vâng, hoặc cấp cao hơn nữa là Google Maps embed, nơi bạn cũng có thể chọn một vị trí rồi làm nổi bật lên để post bài của bạn. acf dropdown trong custom post type

Bạn cũng cũng có thể có thể thiết lập nơi nào màn hình chỉnh sửa sẽ hiện lên.

Vì những field này được tạo bởi plugin, bạn cần dùng function của plugin để hiển thị chúng. Cách thức thế nào sẽ có tiếp tục trình bày ở phần tiếp theo.

Styling WordPress Custom Post Type

Để tạo theme template cho post types mới của bạn, bạn cần tạo files trong thư mục gốc của theme với đúng tên. Nếu bạn không tạo template, WordPress sẽ dùng single.php archive.php thay thế.

  • Template cho individual post – single-{post-type}.php
  • Template cho archive page – archive-{post-type}.php .

Phần {post-type} của tên file cần là tên trong parameter 1 của register_post_type().

  • Đối với movie custom post type, file name là single-movie.php archive-movie.php .
  • Đối với movie review custom post type, file names là single-review.php archive-review.php .

Cách tốt nhất để thi hành được 2 file trên là nhân bản single.php archive.php rồi thay tên cho đúng. Như vậy cấu trúc sẽ tương đồng nhau trong theme của bạn, và mọi thứ template tags cũng đã có sẵn.

Hiển thị Custom Fields trong Posts

Để hiển thị custom fields được tạo trong trình WordPress editor, bạn cũng có thể dùng 2 functions sau.

 // Generates all custom fields attached to the post in a  
    list the_meta(); // Get a specific piece of information echo get_post_meta( $post-> ID, 'Budget', TRUE );

Những functions này phải khớp với template files được dùng để hiển thị bài viết.

the_meta()

Hiển thị mọi thứ custom fields đi chung với bài viết trong một

    list. Kết quả của tag
    sẽ tương tự như sau:

  
  • {your_key} {your_value}

Nó hoạt động ở khắp nơi trong 1 single post template, nhưng nếu bạn muốn hiển thị nó ở nơi khác, nó phải để trong WordPress loop .

get_post_meta()

  • Lấy 3 parameters và trả về một kết quả.
  • Parameter đầu tiên là ID của bài viết, bạn có thể dùng $post-> ID để lấy ID của bài viết đang xem
  • Parameter thứ hai là tên của custom field, và có phân biệt hoa thường.
  • Parameter thứ 3 là một boolean tên là $single và cũng có thể có thể TRUE (trả về kết quả chuỗi) hoặc FALSE (trả về một array).

GHI CHÚ: Bạn có thể tạo nhiều custom fields với cùng tên nhưng khác giá trị. nếu có nhiều trường trùng tên, đặt FALSE sẽ trả về một array chứa mọi thứ chúng.

   ID, 'Box Art', TRUE ); if (!empty($movie_box_art)) { ?>      

get_post_meta() function trả về một giá trị, bạn cũng có thể có thể dùng giá trị này trong điều kiện để thay đổi layout cho phù hợp.

Trong hướng dẫn trên, chúng tôi kiểm tra xem nếu phim có một box art được gắn vào nó qua custom field chưa. Nếu $movie_box_art bị trống, echo div và ảnh.

Hiển thị Advanced Custom Fields

 // Display field value the_field( 'FIELD NAME' ); // Return field value get_field( 'FIELD NAME' ); 

Advanced Custom Fields plugin có functions của riêng nó và shortcode để hiển thị các trường. acf-ten-field

the_field(  ‘ FIELD NAME’  );

Hiển thị giá trị của 1 field xác định, bạn phải dùng Field Name bạn đã điền trong khi đặt field group.

get_field( ‘FIELD NAME’ );

Trả về kết quả của một trường nhất định, hữu ích khi đặt những câu truy vấn có điều kiện.

Đây là những funcitons bạn có thể bắt buộc phải dùng nhiều. Cũng có nhiều functions cao cấp khác, bạn có thể tham khảo trong bộ tư liệu chính thức ở đây.

Shortcode

 [acf field="FIELD NAME"] 

Bạn hiển thị trường trực diện trong bài viết bằng shotcode ở trên.

Hiển thị Custom Post Types trên Front page

 / Hook our custom function to the pre_get_posts action hook add_action( 'pre_get_posts', 'add_reviews_to_frontpage' ); // Alter the main query function add_reviews_to_frontpage( $query ) { if ( is_home() && $query-> is_main_query() ) { $query-> set( 'post_type', array( 'post', 'movie', 'review' ) ); } return $query; } 

Custom post types không hiển thị trên trang chính mặc định, vì vậy bạn phải viết hàm mới để gọi cách thức set của WordPress’ WP_Query object.

Function này kiểm xem nếu người truy cập có trên trang chủ không và query active có phải là query chính được tạo bởi WordPress không.

$query-> set() lấy 2 tham số:

  • Parameter đầu tiên là property bạn mong muốn đổi, ở tình huống này chúng ta sẽ đổi post_type property
  • Parameter thứ hai là array bạn mong muốn dùng làm giá trị của post_type property

Trong đoạn code ở trên, array bắt đầu bằng ‘post’ – vì mỗi bài viết WordPress đều có post type của “post”, vì vậy nó cần được tích hợp trong frontpage.

Nếu bạn chỉ muốn custom posts của một số loại nhất định hiện trên frontpage, bạn cũng có thể bỏ ‘post’ và sử dụng custom post type của riêng bạn.

Chúng tôi thêm ‘movie’ và ‘review’ vào array, để trang chủ hiển thị tất post thông thường, tất cả movie post, tất cả review post.

Giá trị bạn điền phải khớp với parameter 1 trong function register_post_type() .

Lời kết

Trong bài chỉ dẫn bạn đã biết phương pháp làm ra sao để tạo custom post type WordPress và tin tức nào cần để trình lên cho chúng. Tính linh hoạt của custom post type WordPress đã là phần tử quan trọng của bất kỳ WordPress website nào. Khi phối hợp cả categories và taxonomies, bạn có toàn quyền kiểm soát cách người xem thấy bài post của bạn.

Từ khóa bài viết: dinhthuanit.com,

Bài viết Làm thế nào để tạo Custom Post Type WordPress được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang