Post WordPress là gì? Cách đăng Post và tạo Custom Post Type

Mắt Bão 22/06/2022 24 phút đọc

 

Post WordPress là gì?

Post WordPress là bài viết hoặc nội dung chia sẽ đăng trên website được lập trình trên nền tảng WordPress. Một ví dụ điển hình của Post WordPress chính là bài viết mà độc giả đang theo dõi. Vậy các tính năng của Post WordPress là gì? Làm thế nào để tạo và tùy chỉnh (custom) Post? Cùng Mắt Bão tìm hiểu trong bài viết này nhé!

Post WordPress là gì? Nó được hiển thị trên website sau khi đăng
Post WordPress được hiển thị trên website sau khi đăng

Tất cả mọi trang web dù được viết bằng mã nguồn nào đều có những bài đăng, bài viết và WordPress cũng không ngoại lệ. Các bài viết này trong WordPress được gọi với cái tên là Post WordPress. Tuy nhiên, không chỉ dừng lại ở đó, mã nguồn mở này còn sở hữu nhiều tính năng thú vị dành riêng cho Post.

Hướng dẫn cách tạo Post lên WordPress

Post WordPress là gì? Quản lý Post trong WordPress
Quản lý Post trong WordPress

Để đăng một Post mới lên một website WordPress, bạn phải truy cập vào trang quản trị WordPress Dashboard và chọn Menu Post bên trái. Đây là nơi cho phép quản lý các Post hay còn gọi là bài viết của trang web, tùy thuộc cấp độ tài khoản người quản trị mà có thể có thêm các quyền thêm, xóa, sửa.

Post WordPress là gì? Cách đăng một Post mới trong WordPress
Cách đăng một Post mới trong WordPress

Đối với các trang web mới chưa có nội dung, bạn sẽ nhìn thấy một bài viết mẫu có tiêu đề là “Hello World!”. Ngoài ra, còn có thêm một số thông tin đi kèm như tên tác giả, chuyên mục, ngày tháng… Nhấn chọn “Add New” ở góc trên, bên trái để thêm bài viết mới.

Post WordPress là gì? WordPress Editor phiên bản mới nhất
WordPress Editor phiên bản mới nhất

Trên đây là giao diện đăng Post lên WordPress mới nhất với các mục nhập chia theo khung gồm tiêu đề, nội dung. Bên phải sẽ có thêm thanh công cụ cho phép bổ sung các thông tin chi tiết như chuyên mục, đường dẫn, thẻ…

Sau khi đã hoàn tất bài viết bạn chọn nút “Publish” ở góc phải trên cùng để đăng bài. Lúc này nội dung sẽ được cập nhật ở ngoài trang web và người truy cập web có thể nhìn thấy những gì bạn đã viết trong Post.

Cách Schedule Post WordPress

Post WordPress là gì? Tính năng Schedule sẽ tự động đăng bài viết theo lịch trình định sẵn
Tính năng Schedule sẽ tự động đăng bài viết theo lịch trình định sẵn

Schedule Post WordPress là việc lên lịch đăng bài viết tự động cho Post WordPress. Bằng cách này, người viết bài có thể quyết định thời gian bài đăng xuất hiện trên web mà không cần truy cập trang quản trị.

Post WordPress là gì? Lên lịch đăng bài ngay trong WordPress Editor
Lên lịch đăng bài ngay trong WordPress Editor

Tính năng này rất hữu ích và thường sử dụng khi có một số lượng lớn bài đăng và muốn các bài viết được hiển thị theo thời gian có chủ định. Bạn có thể lên lịch đăng bài ngay trong giao diện viết bài bằng cách đổi “Immediately” thành ngày giờ trong tương lai và chọn “Schedule” (nút “Publish” đã chuyển đổi).

Kiến thức bạn cần biết đề cài đặt Plugin WordPress Schedule Posts:

Các Plugin Schedule Post WordPress tốt là gì?

Những cái tên đại diện cho Plugin Schedule Post WordPress tốt là gì? Hãy để Mắt Bão liệt kê cho bạn một số cái tên nhé!

Plugin WordPress – WP Scheduled Posts là gì?

Post WordPress là gì? Một số plugin hỗ trợ lên lịch đăng bài viết tự động
Một số plugin hỗ trợ lên lịch đăng bài viết tự động

Ngoài cách trên, bạn còn có thể tham khảo việc sử dụng các plugin để có thêm nhiều tính năng quản lý. WP Scheduled Posts sẽ là một lựa chọn đáng cân nhắc với các tính năng cơ bản như:

  • Bổ sung widget hiển thị danh sách bài viết chờ xuất bản.
  • Quản lý người nhìn thấy widget dựa trên phân quyền người dùng.
  • Cho phép xuất bản bài viết đã được đặt lịch ngay lập tức.

Plugin WordPress – Advanced Scheduled Posts là gì?

Post WordPress là gì? Plugin sẽ cung cấp thêm nhiều tính năng nâng cao
Plugin sẽ cung cấp thêm nhiều tính năng nâng cao

Mang đến thêm một số tính năng nâng cao khác trong việc quản lý thời gian đăng bài. Tuy nhiên, bạn chỉ nên sử dụng 1 plugin để tránh xung đột và làm chậm trang web gây ảnh hưởng đến trải nghiệm người dùng. Trong đó, Advanced Scheduled Posts có các tính năng quan trọng: 

  • Cập nhật tính năng ghi đè lên một bài viết đã hết hạn của người khác.
  • Kiểm soát ngày hết hạn của một bài viết.

Plugin WordPress – Schedule Posts Calendar là gì?

Post WordPress là gì? Cung cấp bộ lịch Javascript cho thao tác tiện lợi hơn
Cung cấp bộ lịch Javascript cho thao tác tiện lợi hơn

Nếu bạn không muốn dùng một plugin quản trị bên ngoài hãy tham khảo Schedule Posts Calendar:

  • Plugin thay thế công cụ mặc định bằng một bộ lịch Javascript.
  • Tùy chọn ngày tháng bằng giao diện thay vì nhập con số.
  • Bổ sung nhiều lựa chọn hiển thị tên tháng.

Ưu điểm và nhược điểm của Schedule Post WordPress là gì?

Mặc dù Schedule Post WordPress là tính năng khá hữu ích và được sử dụng phổ biến. Tuy nhiên, bản thân chức năng này của WordPress vẫn tồn tại những ưu và nhược điểm nhất định.

Ưu điểm của Schedule Post WordPress là gì?

  • Giúp người bận rộn chủ động đăng bài theo thời gian định sẵn.
  • Tối ưu thời gian đăng bài theo nhu cầu của độc giả website.
  • Giúp các nội dung được hiển thị theo trật tự.
  • Tối ưu SEO, khi mà yếu tố cập nhật nội dung đang dần trở nên quan trọng hơn.

Nhược điểm của Schedule Post WordPress là gì?

  • Schedule Post WordPress có thể không hoạt động do vấn đề cron job.
  • Các thay đổi từ phía server có thể ảnh hưởng đến việc lịch đăng bài đã chuẩn bị.

Cách tạo Custom Post Type WordPress

Custom Post Type trong WordPress là gì? Post có thể được hiểu là bài viết tùy chỉnh
Custom Post Type trong WordPress có thể được hiểu là bài viết tùy chỉnh
Hướng dẫn Custom Post Type dùng Custom Post Type Maker

Custom Post Type có thể hiểu là loại bài viết tùy chỉnh nội dung nhưng khác với Page và Post. Trong WordPress, các bài viết được đăng tại menu Post nhưng Custom Post Type sẽ có đường dẫn truy cập riêng trong admin control panel.

Custom Post Type sẽ cho phép tạo ra danh sách bài viết cùng loại giúp việc quản lý dễ dàng hơn. Khả năng tùy chỉnh category và taxonomies mang đến sự linh hoạt cần thiết mà ít mã nguồn nào có.

Post WordPress là gì? Ví dụ về Custom Post Type trong WordPress
Ví dụ về Custom Post Type trong WordPress

Trong ví dụ trên, chúng ta đã tạo ra 2 Custom Post Type WordPressMoviesMovie Reviews. Movies là các bài viết về phim và Movie Reviews là các bài viết đánh giá phim. Tất nhiên, khi truy cập Movies bạn sẽ không thấy các bài đánh giá phim và ngược lại.

Post WordPress là gì? Các trường có thể được thêm vào Custom Post Type
Các trường có thể được thêm vào Custom Post Type

Trong ảnh là các trường được thêm vào Custom Post Type ví dụ như đạo diễn, ngày phát hành bộ phim, IMDB… Custom Fields là những trường được tạo ra và có thể được chọn trong mọi loại post, cần dùng plugin để đảm bảo các trường hiển thị đúng nơi.

Cách tạo WordPress Custom Post Type là viết một function gọi hàm register_post_type() với 2 tham số. Function phải hook vào init action hook để Custom Post Type được đăng ký đúng.

Function được viết như sau

//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ả custom function nên có prefixed để tránh xung đột với plugins hoặc themes functions khác. Trong đó, 2 tham số cho hàm register_post_type() là:

  • Tên post type gồm 20 ký tự, viết thường và không chứa khoảng trắng.
  • Associative array có tên $args chứa thông tin về post type trong cặp ‘key’=>’value’. Vì arguments và labels là arrays, sẽ tốt hơn nếu đặt biến riêng cho label, biến cho $args rồi gọi hàm này.

Array $args

Những keys thông dụng nhất của $args ở dưới, không có khóa nào bắt buộc:

  • labels – array định nghĩa nhiều loại văn bản. 
  • description – mô tả ngắn cho loại post type.
  • public – mặc định là FALSE có nghĩa Post Type sẽ không hiển thị trong Admin Control Panel.
  • exclude_from_search loại post này có được hiển thị trong kết quả tìm kiếm hay không, mặc định là TRUE.
  • publicly_queryable – loại post này có được query trong URL như http://www.mywebsite.com/?post_type=movie không hoặc trong cách dùng nâng cao là qua function query_posts(). Mặc định giá trị của nó sẽ là giá trị public.
  • show_ui – có hiển thị menu link và post editors trong Admin Control Panel không? Giá trị mặc định tương tự publicly_queryable sẽ có giá trị của public.
  • show_in_nav_menus – Có thể thêm loại post này vào menu hay trong Appearance => Menus không. Mặc định cũng là public.
  • show_in_menu – có hiển thị Post type link trong thanh điều hướng của Admin Control Panel hay không? Nhập vào 1 chuỗi để tạo sub-link nếu muốn.
  • show_in_admin_bar – có hiển thị Post type này trên thanh Admin hay không?
  • menu_position – vị trí của link mới trong menu điều hướng của Admin Control Panel.
  • hierarchical – các bài viết có thể được gắn vào Parent post hay không? Khi dùng TRUE, $supports array phải chứa tính năng ‘page-attributes’.
  • supports – hỗ trợ chọn lọc nhiều tính năng như featured, images, excerpts, custom fields…
  • taxonomies – có thể áp dụng một array của taxonomies vào loại post type này với taxonomies được đăng ký trước.
  • has_archive – có trang Archive page cho post type hay không.
  • query_var – quản lý post có thể được xem bằng cách gõ post type hoặc post name trong query hay không.

Tham khảo thêm:

Labels array

Là khóa đầu tiên trong $args với tên là label và phải là array, định nghĩa nhiều loại văn bản liên quan Custom Post Type. Vì nó chứa nhiều thông tin, bạn nên tạo một biến để lưu trữ, ví dụ $label. Một số khóa quan trọng của labels array, tất cả đều không bắt buộc:

  • name – tên của post type (loại bài viết)
  • singular_name – tên của một post (tên bài viết) của loại post này.
  • add_new – có thể thay đổi thành ‘Add Movie’.
  • add_new_item – có thể thay đổi thành ‘Add New Movie’.
  • edit_item – có thể thay đổi thành ‘Edit Movie’.
  • featured_image – thay cho ‘Featured Image’ trong post editor, có thể đổi thành ‘Movie Poster’.
  • set_featured_image – thay cho ‘Set Featured Image’, có thể đổi thành ‘Add Movie Poster’.
  • menu_name – đổi chữ của link, mặc định text của link là tên khóa.

‘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;

Là một khóa của $args, một array đơn giản nơi viết ra danh sách của post editor muốn kích hoạt trong Custom Post Type. Mặc định sẽ chỉ có title và editors được kích hoạt nhưng bạn có thể đổi thành FALSE thay cho một array để vô hiệu tính năng biên tập. Lúc này, bài viết vẫn hiển thị nhưng không thể chỉnh sửa.

Các tính năng 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.

Cách tạo Custom Post Type trong WordPress bằng Plugin

Post WordPress là gì? Sử dụng plugin để tạo Custom Post Type là giải pháp được khuyên dùng
Sử dụng plugin để tạo Custom Post Type là giải pháp được khuyên dùng

Dựa theo các thông tin cần cho hàm đã liệt kê ở trên, bạn có thể dựng plugin, viết hàm và hook vào action hook init.

Dưới đây là mẫu code plugin tạo Custom Post Type cho ví dụ về Movie ở trên:

Mẫu code plugin tạo Custom Post Type

<?php

/*

Plugin Name: My Custom Post Types

Description: Add post types for movies and movie reviews

Author: Liam Carberry

*/

// Hook <strong>lc_custom_post_movie()</strong> 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 <strong>lc_custom_post_movie_reviews()</strong> 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);

}

Khi kích hoạt, sẽ có 2 link mới trong Admin Control Panel bên dưới Posts link. Rê chuột vào sẽ có sub-link là ‘View all’ và ‘Add New’, được định nghĩa trong array $labels.

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

Custom Fields được thêm vào sẽ hiển thị trong danh sách drop down trên mỗi bài viết. Tuy nhiên, bạn có thể hạn chế Custom Fields cho một post type nhất định bằng cách dùng plugin Advanced Custom Fields Plugin.

Plugin sẽ cho phép thêm một editor đơn giản vào WordPress để tạo custom fields và chọn post type hiển thị. Có nhiều trường để bạn lựa chọn như text box, text area, email address… Ngoài ra, do những fields này được tạo bởi plugin, bạn phải dùng function của plugin để hiển thị chúng.

Cách thiết kế WordPress Custom Post Type

Plugin mang đến nhiều tùy chọn cho người quản trị
Plugin mang đến nhiều tùy chọn cho người quản trị

Cần tạo files trong thư mục gốc của theme với đúng tên, nếu không WordPress sẽ dùng 2 file single.php archive.php.

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

Trong đó, {post-type} của tên file phải là tên trong parameter 1 của register_post_type().

  • Với movie custom post type, file name là single-movie.phparchive-movie.php.
  • Với movie review custom post type, file names là single-review.phparchive-review.php.

Hãy nhân bản 2 file single.phppage.php và đổi tên, như vậy, ta sẽ có cùng cấu trúc trong theme và tất cả theme tags đều đã có sẵn.

Hiển thị Custom Fields trong Post

Bây giờ, để hiển thị custom fields được tạo trong WordPress editor, có thể dùng 2 function dưới đây. Lưu ý, function phải khớp với template files được dùng để hiển thị bài viết.

// Generates all custom fields attached to the post in a <ul> list

the_meta();

// Get a specific piece of information

echo get_post_meta( $post->ID, 'Budget', TRUE );

The_meta()

<ul class='post-meta'>

  <li>

<span class='post-meta-key'>{your_key}</span> {your_value}

  </li>

</ul>

Hiển thị tất cả custom fields đi chung với bài viết trong một <ul> list. Nó hoạt động ở mọi nơi trong một single post template nhưng nếu bạn muốn hiển thị nó ở nơi khác, hãy đặt 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, dùng $post->ID để lấy id của post đang xem.

Parameter thứ hai là tên của custom field có phân biệt hoa thường.

Parameter thứ ba là một boolean tên $single và có thể trả về kết quả chuỗi nếu giá trị là TRUE hoặc trả về một array nếu giá trị là FALSE.

Lưu ý: có thể tạo nhiều custom fields 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 tất cả.

<?php

  $movie_box_art = get_post_meta( $post->ID, 'Box Art', TRUE );

if (!empty($movie_box_art)) { ?>

  <div class="movie-poster-box">

<img src="<?php echo $movie_poster ?>" alt="<?php single_post_title(); ?> ">

  </div>

<? } ?>

Hiển thị Advanced Custom Fields

// Display field value

the_field( 'FIELD NAME' );

// Return field value

get_field( 'FIELD NAME' );

Plugin này có functions và shortcode để hiển thị các trường.

Chú ý các giá trị của Field để hiển thị Advanced Custom Fields
Chú ý các giá trị của Field để hiển thị Advanced Custom Fields

the_field(‘FIELD NAME’);

Trong đó, giá trị ‘FIELD NAME’ là tên của trường đã tạo trong field group, hàm này dùng để hiển thị giá trị của một field xác định.

get_field(‘FIELD NAME’);

Trả về kết quả của một trường nhất định, được dùng khi đặt câu truy vấn có điều kiện. Tham khảo thêm các function cao cấp khác tại: https://www.advancedcustomfields.com/resources/#functions

Shortcode

Hiển thị các trường trực tiếp trong bài viết bằng cách sử dụng shortcode ở trên.

Cách hiển thị Custom Post Types trên Front page

Mặc định bài viết tùy chỉnh sẽ không được hiển thị trên trang chính
Mặc định bài viết tùy chỉnh sẽ không được hiển thị trên trang chính

Custom Post Types sẽ không hiển thị trên trang chính mặc định. Vì vậy, bạn sẽ cần viết hàm mới như dưới đây để gọi phương pháp set của WordPress WP_Query object. 

// 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;

}

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

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

  • Parameter thứ nhất là property muốn đổi, ở đây ta đổi post_type property.
  • Parameter thứ hai là array dùng làm giá trị của post_type property.

Trong đoạn code mẫu ở trên, array bắt đầu bằng ‘post’ vì mỗi bài viết trong WordPress đều có post type của ‘post’. Nếu muốn hiển thị một số loại nhất định trên front page hãy bỏ ‘post’ và thêm vào các post type cần hiển thị.

Ví dụ, trong code mẫu bạn sẽ thấy có thêm 2 giá trị là ‘movie’ và ‘review’ trong array. Kết quả thu được là tất cả post thường, movie post và review post. Lưu ý giá trị điền vào phải khớp với parameter thứ nhất trong function register_post_type() ở trên.

Mong rằng với hướng dẫn của “Mắt Bão – nhà cung cấp dịch vụ cho thuê máy chủ uy tín” sẽ giúp các bạn có thể tự mình tạo Custom Post Type theo sở thích. Đây là một trong những tính năng rất hữu ích của Hosting WordPress, nếu gặp khó khăn trong quá trình thực hiện hãy để lại bình luận bên dưới bài viết để được hỗ trợ nhé!






Bài viết liên quan