Làm trang shop đơn giản với WordPress – 03

Bài này thuộc phần 3 của 7 phần trong serie Shop đơn giản với WordPress

Tiếp tục trong phần này, chúng ta sẽ làm bước đầu tiên đó là tạo custom post type để quản lý các sản phẩm. Như bạn cũng biết mặc định WordPress đã cho chúng ta các post type cơ bản như Post (quản lý bài viết), Page (quản lý trang) và Attachment (quản lý tập tin đính kèm). Nếu chúng ta cần đăng sản phẩm vào, thì sẽ cần tạo một post type mới chứ không dùng các post type mặc định.

Và tương tự với taxonomy, chúng ta sẽ cần tạo một taxonomy mới để phân loại sản phẩm và sẽ được gọi là danh mục sản phẩm.

Để tạo custom post type và taxonomy chúng ta có thể làm viết code thông qua register_post_type APIregister_taxonomy API nhưng trong serie này mình sẽ tạo post type thông qua plugin Piklist vì viết code ngắn hơn, dễ đọc hơn là cách viết thông thường.

Trước khi làm, bạn hãy kiểm tra rằng tập tin /sparkling-child/functions.php đã có đoạn này:

/**
 * Nhúng tập tin /inc/init.php vào để load một số chức năng trong website
 */
require dirname( __FILE__ ) . '/inc/init.php';

Nếu chưa có thì thêm vào.

Tạo Custom Post Type

Bây giờ bạn tạo ra một tập tin tại /sparkling-child/inc/custom-post-type.php và tập tin này sẽ chứa toàn bộ code để tạo custom post type. Chúng ta có thể viết thẳng vào /sparkling-child/functions.php nhưng các code này mình nên bỏ vào thư mục riêng cho dễ quản lý về sau.

Trong tập tin custom-post-type.php ta có đoạn code sau:

/**
 * Tạo custom post type
 * https://piklist.com/learn/doc/piklist_post_types/
 */
function thachpham_register_post_types( $post_types ) {

    // Tạo post type tên 'sanpham'
    $post_types['sanpham'] = array(
        'labels' => array(
            'name' => 'Sản phẩm',
            'singular_name' => 'Sản phẩm',
            'add_new' => 'Thêm sản phẩm',
            'add_new_item' => 'Thêm sản phẩm mới',
            'all_items' => 'Tất cả sản phẩm',
            'edit_item' => 'Sửa sản phẩm',
            'featured_image' => 'Ảnh đại diện sản phẩm',
            'filter_item_list' => 'Lọc danh sách sản phẩm',
            'item_list' => 'Danh sách sản phẩm',
            'set_featured_image' => 'Thiết lập ảnh đại diện'
        ),
        'title' => 'Nhập tên sản phẩm',
        'public' => true,
        'supports' => array('title', 'thumbnail', 'editor', 'comment'),
        'rewrite' => array('slug' => 'sanpham'),
        'hide_meta_box' => array('author'),
        'has_archive' => true
    );

    return $post_types;
}
add_filter('piklist_post_types', 'thachpham_register_post_types');

?>

Ở đoạn code trên, các tham số bên trong đều sử dụng tham số mặc định của hàm register_post_type() nên ở đây mình sẽ không giải thích thêm. Nhưng cách dùng thì khác, đó là chúng ta sẽ viết theo chuẩn tạo post type của plugin Piklist, tham khảo tại https://piklist.com/learn/doc/piklist_post_types/.

Trong đó, bạn lưu ý chỗ $post_types['sanpham'] thì sanpham chính là tên custom post type mà chúng ta sẽ cần tạo.

Sau đó bạn mở tập tin /sparkling-child/inc/init.php và thêm đoạn sau để nó gọi tập tin custom-post-type.php chạy:

<?php

include('custom-post-type.php');

Sau khi làm thành công chúng ta đã có một phần tên Sản phẩm trong trang quản trị.

shopdongian-cpt-01

Tạo Custom Taxonomy

Tiếp tục chúng ta tạo thêm tập tin /sparkling-child/inc/custom-taxonomy.php và cho đoạn sau vào:

<?php
/**
 * Tạo custom taxonomy
 * https://piklist.com/learn/doc/getting-started-taxonomies-piklist/
 */
function thachpham_register_taxonomies( $taxonomies ) {
    $taxonomies['sanpham_cat'] = array(
        'post_type' => 'sanpham',
        'name' => 'sanpham_cat',
        'show_admin_column' => true,
        'configuration' => array(
            'hierarchical' => true,
            'labels' => array(
                'name' => 'Danh mục sản phẩm',
                'name_singular' => 'Danh mục sản phẩm',
                'all_items' => 'Tất cả danh mục sản phẩm',
                'edit_item' => 'Sửa danh mục sản phẩm',
                'view_item' => 'Xem danh mục sản phẩm',
                'add_new_item' => 'Thêm danh mục sản phẩm'
            ),
            'show_ui' => true,
            'query_vars' => true,
            'rewrite' => array('slug'=>'sanpham_cat')
        )
    );

    return $taxonomies;
}
add_filter('piklist_taxonomies', 'thachpham_register_taxonomies');

Trong đó, 'post_type' => 'sanpham' nghĩa là chúng ta sử dụng taxonomy này cho post type tên sanpham. Còn phần $taxonomies['sanpham_cat'] và 'name' => 'sanpham_cat' là thiết lập tên taxonomy này là sanpham_cat. Tham khảo thêm tại https://piklist.com/learn/doc/getting-started-taxonomies-piklist/.

Cuối cùng là thêm đoạn sau vào /sparkling-child/inc/init.php để nó load tập tin này:

include('custom-taxonomy.php');

Và làm thành công bạn sẽ thấy có một phần tên là Danh mục sản phẩm trong phần sản phẩm.

shopdongian-cpt-02

Lời kết

Bài này kết thúc với việc chúng ta đã tạo thành công một custom taxonomy và custom post type và ở bước sau chúng ta sẽ tạo một thành phần khá quan trọng nữa đó là metabox để nhập giá và thuộc tính sản phẩm vào.

 

Thạch Phạm

Đam mê với web và lập trình, thích viết và chia sẻ, nghiện cà phê và xăm mình, hứng thú với nhạc dân ca và nhạc không lời.

Xem thêm bài viết Subscribe

Để lại bình luận

46 Bình luận trên "Làm trang shop đơn giản với WordPress – 03"

avatar
Sắp xếp theo:   mới nhất | cũ nhất | đánh giá nhiều
Rin
Khách

Chào bác.
Mình cài đặc plugin piklist nó bị error.
Hay do bản wp mới nhất không hổ trợ nhỉ.

Parse error: syntax error, unexpected T_FUNCTION.

hoàng
Khách

Chào bạn, tôi đã làm theo hưỡng dẫn nhưng không thấy hiện lên “Sản phẩm”, có thể chỉ giúp tôi vì sao được k ?
thanks

Tuấn
Khách

có thể là do bạn chưa active cái sparkling-child

Duy
Khách

cho mình hỏi là sao làm y chang rùi mà vẫn không hiện được trang sản phẩm vậy bạn??? mình cũng đã coi comment rùi và sữa theo rùi nhưng vẫn ko hiện ra dòng Sản phẩm. Xin bạn chỉ giúp mình với ạ

Duy
Khách

anh sao em làm y chang mà không thấy trang Sản phẩm vậy ạ???

Đình Phương
Khách

giúp mình với… mình làm y chang như hướng dẩn và những chia sẻ bên dưới nhưng cứ code câu lệnh nhúng require dirname( FILE ) . /inc/init.php vào là lỗi trắng trang wp-admin.
trong file debuglog nó báo như thế này ai sửa dùm mình với .
[27-Nov-2016 22:53:44 UTC] PHP Warning: require(C:xampphtdocsdinhphuong.comwp-contentthemessparkling-childinc/inc/init.php): failed to open stream: No such file or directory in C:xampphtdocsdinhphuong.comwp-contentthemessparkling-childincfunctions.php on line 2

[27-Nov-2016 22:53:44 UTC] PHP Fatal error: require(): Failed opening required ‘C:xampphtdocsdinhphuong.comwp-contentthemessparkling-childinc/inc/init.php’ (include_path=’.;C:xamppphpPEAR’) in C:xampphtdocsdinhphuong.comwp-contentthemessparkling-childincfunctions.php on line 2

Đình Phương
Khách

ĐÃ HIỂU VÀ SỬA LỖI ĐƯỢC RỒI THANKS TẤT CẢ MỌI NGƯỜI

Tùng Thanh Đào
Khách

mình làm giống ý hệt các bước nhưng khi loại lại trang vs trang admin thì trắng xáo không hiện gì lên
giúp mình sửa ngay nhé

Thắng
Khách

Mình làm mãi mà k dược

Phan Khanh
Khách

Em làm theo các bước rồi, mà vẫn không thấy danh mục sản phẩm
trong các file php em đã thêm đầy đủ hết rồi
Anh Thạch xem giúp em với

Huynh Thanh Tuan
Khách

Bạn copy dòng require dirname( FILE ) . ‘/inc/init.php’; xuống cuối cùng (trong phần php) của file function.php nhé!

ticrkhcrkh
Khách

Mình thêm vào rồi nhưng vẫn không đc T.T

LONG CHU DANH
Khách

Sao làm như hướng dẫn mà không thấy mục Sản phẩm đâu nhỉ. Có mấy câu lệnh php ko có ?> ở cuối nên mình đã thêm vào, nvậy có đúng ko nhỉ.
– Ở bải 2, phần sửa file function.php, copy tất cả các đoạn code ở viết vào là được à

LONG CHU DANH
Khách

Quên nữa, sao ko thấy file debug.log ở trong wp-content nhỉ

pham trang
Khách

anh thạch cho e hỏi là. e học theo bài giảng video này. video lập trình theme wordpress ở video 03 tạo cấu trúc theme ạ. thì của e k hiện được: mà hiện dòng: ” stylesheet is missing” ạ. cho e hỏi bị lỗi gì đấy ạ

long
Khách

anh cho em hỏi với.
em làm xong các bước như trên, chạy ok. nhưng bị lỗi font ở những chỗ tiếng việt mình mới thêm vào trong admin ( sản phẩm, danh mục sản phẩm…) sửa lỗi ý thế nào ạ.

Minh
Khách

mình cũng bị lỗi y chang, không biết sửa thế nào nhỉ

Lâm
Khách

Anh ơi, em làm đúng như anh hướng dẫn, nhưng trang quản trị của em vẫn không hiện lên Sản phẩm. Anh giúp em với ạ! E cám ơn anh!

ticrkhcrkh
Khách

Cùng trường hợp bạn này T.T

Việt
Khách

Anh Thạch cho hỏi là ở bước include(‘custom-post-type.php’); vào file init.php thì không load được ảnh trong thư viện, dẫn đến lúc sau post sản phẩm không thêm ảnh đại diện được. Em đã test ở bước này, vì trước khi include(‘custom-post-type.php’); vẫn load được ảnh đã upload trong thư viện ra. Anh check lại giúp nhé

devtruong
Khách

em không muốn dùng cái plugin Piklist thi sao anh?

Phap Trinh
Khách

http://i.imgur.com/ElUH3hU.png
Sao em nhập code cho thằng Custom Post Type nó báo như hình ạ.

Hoang Phung
Khách

Mình cụng y chang lỗi zậy, và trong admin bar không hiện “Sản Phẩm” và “Danh Mục Sản Phẩm” . Cái này sửa sao Thạch nhĩ

Phụng
Khách

Mình cũng bị lỗi y chang như zậy, sửa sao Thạch nhĩ

Tuan Tran Anh
Khách

Sao ko dùng plugin WooCommer mà phải cấu hình cự khổ như vậy?

Văn Nam
Khách

Mong anh ra tiếp bài. em cũng đang cần tạo 1 trang nhỏ để làm chức năng bán và k muốn dùng tới plugin Woo.
Nếu có chức năng tiền ảo từ nạp từ baokim., ngân lượng cho thanh toán = card để mua sản phẩm luôn thì hay anh à. Trừ tiền qua tiền ảo luôn

wpDiscuz
menu
menu