Tổng hợp Hướng dẫn toàn tập về custom Wordpress bằng CODE
           

Hướng dẫn này mình hướng đến tạo giá trị - hỗ trợ mọi người và không nhằm mục đích thương mại. Trong hướng dẫn này mình chỉ vào trọng tâm tất tần tật về tùy biến website bằng code (hạn chế plugin nhiều nhất có thể) nên nội dung nó sẽ cực kỳ ngắn và không vòng vo. Hi vọng bạn không quá khó chịu vì sự quá ngắn gọn của mình.

  • CODE chỉnh sửa mình thường can thiệp trực tiếp vào file (mục đích là để dễ kiểm soát vị trí hiển thị hơn là sử dụng hook)
  • Nếu bạn có khó khăn hay cần mình hỗ trợ bất kì nội dung nào thì hãy để lại bình luận phía bên dưới, mình sẽ sớm ra nội dung hướng dẫn bạn.
  • Nếu bạn thấy website mình có gì hay ho muốn ứng dụng lên website bạn thì liên hệ với mình để được hỗ trợ!

Cách tạo Custom Post type bằng CODE đơn giản chi tiết thành công 100%

Custom posttype là cách mà bạn có thể tạo ra các trang phù hợp với định hướng phát triển của website, những trang có giao diện, cách hiển thị khác và tạo ra bộ lọc riêng biệt để bạn có thể quản trị nó tốt hơn.

Theo mặc định thì wordpress sẽ có 2 loại chính là page và post. Nếu bạn có cài woocommerce thì nó sẽ có thêm loại thứ 3 là product. Trong trường hợp bạn cần nhiều hơn thò bạn có thể tạo và đăng những trang riêng cho mình. Loại đó gọi là Custom Post Type.Mình có thạo không giới hạn số lượng bạn nhé.

Custom Post Type vẫn sẽ bao gồm đầy đủ những thành phần tương tự như 2 post type mặc định như: category, custom field, featured image hoặc tag,… Đồng thời, bạn cũng được phép hiển thị chúng ra bên ngoài trang chủ cùng một lúc với Post.

Thôi cùng mình tạo Custom Post Type mà không cần dùng plugin nhé!

  • Tạo file backend.php
  • Require vào file function để sử dụng
  • Tạo file hiển thị riêng để sử dụng

Đầu tiên là file Backend.php

<?php
/**
 * Registers a new post type
 * @uses $wp_post_types Inserts new post type object into the list
 *
 * @param string  Post type key, must not exceed 20 characters
 * @param array|string  See optional args description above.
 * @return object|WP_Error the registered post type object, or an error object
 */
function tndigi_register_name() {
	
	$labels = array(
        'name'               => __( 'Hướng dẫn WordPress', 'text-domain' ), //Tên post type dạng số nhiều
        'singular_name'      => __( 'Hướng dẫn WordPress', 'text-domain' ), //Tên post type dạng số ít
        'add_new'            => _x( 'Add Hướng dẫn', 'text-domain', 'text-domain' ),
        'add_new_item'       => __( 'Add Hướng dẫn WordPress', 'text-domain' ),
        'edit_item'          => __( 'Edit Hướng dẫn WordPress', 'text-domain' ),
        'new_item'           => __( 'New Hướng dẫn WordPress', 'text-domain' ),
        'view_item'          => __( 'Xem', 'text-domain' ),
        'search_items'       => __( 'Search Hướng dẫn WordPress', 'text-domain' ),
        'not_found'          => __( 'Không tìm thấy Hướng dẫn WordPress', 'text-domain' ),
        'not_found_in_trash' => __( 'Không tìm thấy Hướng dẫn WordPress', 'text-domain' ),
        'parent_item_colon'  => __( '', 'text-domain' ),
        'menu_name'          => __( 'Hướng dẫn WP', 'text-domain' ),
    );

    $args1 = array(
        'labels'              => $labels,
        'hierarchical'        => false,
        'description'         => 'description',
        'taxonomies'          => array(),
        'public'              => true,
        'show_ui'             => true,
        'publicy_queryable' =>  true,
        'exclude_from_search' =>  false,
        'show_in_menu'        => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => null,
        'menu_icon'           => 'dashicons-welcome-learn-more', //đây là nơi thay đổi icon hiển thị
        'show_in_nav_menus'   => true,
        'publicly_queryable'  => true,
        'exclude_from_search' => false,
        'has_archive'         => true,
        'query_var'           => true,
        'can_export'          => true,
        'rewrite'             => array('slug' => 'huong-dan-wordpress' ),  //đây là slug hiển thị ở URL
        'capability_type'     => 'post',
        'supports'            => array(
            'title',
            'editor',
            'author',
            'thumbnail',
            'excerpt',
            'custom-fields',
            'trackbacks',
            'comments',
            'revisions',
            'page-attributes',
            'post-formats',
        ),
        'taxonomies' =>  array('post_tag', 'category'),
        'can_export'  =>  true,
        'register_meta_box_cb'  =>  'call_to_function_do_something',
        'description' =>  __('Mô tả sản phẩm ở đây'),
	'taxonomies' => array('post_tag')
    );
    register_post_type( 'huong-dan-wordpress', $args ); //đăng ký custom post type có  tên là "huong-dan-wordpress"
    flush_rewrite_rules(); //bạn dùng thêm dòng này nếu tạo custom post type không thành công
}

add_action( 'init', 'tndigi_register_name' );

Trong đoạn code trên thì phần quan trọng nhất chính là “‘taxonomies’ => array(‘post_tag’)” nếu các bạn muốn nhúng thêm category vô nữa thì sửa thành “‘taxonomies’ => array(‘category’,’post_tag’)”

Đoạn code để khi query post nó sẽ lấy luôn phần custom post type nè

function wpa_cpt_tags( $query ) {
    if ( $query->is_tag() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'huong-dan-wordpress' ) );
    }
}

Bạn copy trang này và lưu với tên là backend.php. Tên này có thể đặt tên khác theo ý thích nhé!

Require vào file function để sử dụng

Bạn require file vào file function.php tại theme đang sử dụng.

require 'custom-posttype_backend.php';

Hôm rồi khi mình có thử tạo custom post type thì thấy nó không có hiển thị (mình tạo trên theme child), sao đó mình thêm dòng flush_rewrite_rules(); thì nó hoạt động bình thường.

flush_rewrite_rules(); //bạn dùng thêm dòng này nếu tạo custom post type không thành công

Tạo file hiển thị riêng để sử dụng

Bạn tạo file có tên là single-[tên custom post type].php để sử dụng code tùy biến riêng. nếu không nó sẽ sử dụng chung template single.php. Như trên ví dụ thì của mình là single-huong-dan-wordpress.php nha.

<?php
/**
 * The blog template file.
 *
 * @package          Flatsome\Templates
 * @flatsome-version 3.16.0
 */

get_header(); //lấy lại header của trang

?>

//bạn code code tùy biến ở đây nha

<?php get_footer(); ?>  //lấy lại  footer của trang

Đây là cấu trúc source khi bạn tạo custom post type:

Cấu trúc code sau khi tạo thành công
Cấu trúc code sau khi tạo thành công

Giải thích thêm về cấu trúc và ý nghĩa của các biến

function tao_custom_post_type()
{
    /*
     * Biến $label để chứa các text liên quan đến tên hiển thị của Post Type trong Admin
     */
    $label = array(
        ‘name’ => ‘Các sản phẩm’, //Tên post type dạng số nhiều
        ‘singular_name’ => ‘Sản phẩm’ //Tên post type dạng số ít
    );
    /*
     * Tất cả các biến $args là những tham số quan trọng trong Post Type
     */
    $args = array(
        ‘labels’ => $label, //Gọi các label trong biến $label ở trên
        ‘description’ => ‘Post type đăng sản phẩm’, //Mô tả của post type
        ‘supports’ => array(
            ‘title’,
            ‘editor’,
            ‘excerpt’,
            ‘author’,
            ‘thumbnail’,
            ‘comments’,
            ‘trackbacks’,
            ‘revisions’,
            ‘custom-fields’
        ), //Các tính năng được hỗ trợ trong post type
        ‘taxonomies’ => array( ‘category’, ‘post_tag’ ), //Các taxonomy được phép sử dụng để phân loại nội dung
        ‘hierarchical’ => false, //Cho phép phân cấp, nếu là false thì post type này giống như Post, true thì giống như Page
        ‘public’ => true, //Kích hoạt post type
        ‘show_ui’ => true, //Hiển thị khung quản trị như Post/Page
        ‘show_in_menu’ => true, //Hiển thị trên Admin Menu (tay trái)
        ‘show_in_nav_menus’ => true, //Hiển thị trong Appearance -> Menus
        ‘show_in_admin_bar’ => true, //Hiển thị trên thanh Admin bar màu đen.
        ‘menu_position’ => 5, //Thứ tự vị trí hiển thị trong menu (tay trái)
        ‘menu_icon’ => ”, //Đường dẫn tới icon sẽ hiển thị
        ‘can_export’ => true, //Có thể export nội dung bằng Tools -> Export
        ‘has_archive’ => true, //Cho phép lưu trữ (month, date, year)
        ‘exclude_from_search’ => false, //Loại bỏ khỏi kết quả tìm kiếm
        ‘publicly_queryable’ => true, //Hiển thị các tham số trong query, phải đặt true
        ‘capability_type’ => ‘post’ //
    );
    register_post_type(‘sanpham’, $args); //Tạo post type với slug tên là sanpham và các tham số trong biến $args ở trên

}
/* Kích hoạt hàm tạo custom post type */
add_action(‘init’, ‘tao_custom_post_type’);
Nếu bạn gặp khó khăn trong chỉnh sửa hoặc muốn phát triển tính năng riêng cho website thì có thể tham khảo dịch vụ bảo trì - phát triển tính năng website wordpress tại TNDigi nhé!

Mình tự học - tìm hiểu - nghiên cứu và làm việc với WordPress được khoảng thời gian nhất định nên lên serial chia sẻ những gì mà mình từng gặp qua. Sẽ có nhiều thiếu sót nên nếu như có chổ nào chưa đúng hay chưa hoạt động được bạn contact với mình để hoàn thiện hơn.

Ghi chú quan trọng:
Cách tuỳ biến không cần can thiệp vào CODE mà sử dụng hook (nếu chưa có trong hướng dẫn) sẽ được mình sớm cập nhật!

Kênh Zalo hỗ trợ miễn phí. Chúc bạn áp dụng thành công!

Tặng mình 1 vote tăng động lực ra thêm nội dung:
5/5 (9 votes)

TNDigi cho ra mắt Hướng dẫn thiết kế website bằng wordpress từ cơ bản đến nâng cao miễn phí
Hướng dẫn gồm có 2 phần: phần 1 hướng dẫn bạn cách làm website | phần 2 hướng dẫn bạn tuỳ biến, phát triển tính năng website bằng CODE

CSKH
0915 666 571
Admin
Trung Ngoc