Trang chủ WordpressHướng dẫn Wordpress Làm trang shop đơn giản với WordPress – 03

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

bởi Thạch Phạm
49 bình luận 4484 views
Khuyến mãi hosting

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.

 

49 bình luận

Có thể bạn quan tâm

0 0 vote
Article Rating
guest
49 Comments
mới nhất
cũ nhất đánh giá nhiều
Inline Feedbacks
View all comments
Lai

Em đã làm theo đúng hướng dẫn nhưng vẫn không hiển thị ra mục Sản Phẩm trong phần quản trị.
Đã thử nhiều cách nhưng vẫn không khắc phục được. Mong mọi người chỉ giúp với ạ.

Long

Mình viết hàm thachpham_register_post_types trong file custom-post-type.php của thư mục child theme thì không hiển thị nhưng viết trong file function.php của parent theme thì được. Không biết có phải do mình sử dụng theme không giống ví dụ không? Mình dung theme Techism.

Rin

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

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

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

hoàng

mình active rồi, cũng làm lại rồi mà không thấy hiện lên.
Giúp mình với
Thanks

Duy

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

Mình không thấy nó chạy bị lỗi nhưng lại không hề hiện dòng sản phẩm lên

Duy

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

Duy

Đã kiểm tra và đã có dòng đó rùi nhưng vẫn không hiện lên

Foxy Lady

Đơn giản là chưa active pluggin

Đình Phương

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

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

Tùng Thanh Đào

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

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

Phan Khanh

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

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

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

LONG CHU DANH

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

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

pham trang

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 ạ

pham trang

e cảm ơn a ak. e sửa được lỗi rồi. nhưng đến video 7 ạ. mà kết quả k hiện được ảnh mà cứ báo lỗi
ở chỗ . đây là đoạn code của e ạ. e đã cài them ajax rebuild thumbnail rồi.
<article id="post-” >

long

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

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

Lâm

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

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

Việt

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é

Việt

Chào anh, em đã chèn code dưới vào wp-config.php nhưng không thấy nó tạo ra file debug,log trong wp-content ạ.
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
define(‘WP_DEBUG_LOG’, true);

Việt

Chào anh Thạch. Em đã chèn
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_LOG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
nhưng không thấy file debug.log được tạo trong wp-content như anh nói.
Tiện thể mỗi lần comment ở đây là em đều phải xác nhận trong mail 1 lần, và lần này là lần comment thứ 2, không biết có được nhận không.

Việt

Em kiểm tra log của vps chung thì thấy báo thế này:
Failed opening required ‘/home/dev1.zoomworld.vn/public_html/wp-content/themes/sparkling-childinc/init.php’
Chắc nó không hiểu đường dẫn khi nối chuỗi (child/inc). Mà require dirname( FILE ) . ‘/inc/init.php’; em đã thêm ở functions.php của child theme rồi mà

devtruong

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

vanhs

Em muốn hỏi chút là nếu sử dụng plugin piklit thì liệu có được phép upload lên themeforest không ạ?
Em cám ơn!

Phap Trinh

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

Phụng

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

Hoang Phung

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ĩ

Việt

Các bạn bị lỗi đó vì trong file custom-post-type.php chưa được thêm thẻ <?php đó.

Tuan Tran Anh

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

Bảo Long

đến đây thì bị lỗi không hiện Custom Post Type . PHP Fatal error: Cannot redeclare thachpham_register_post_types(). Là bị sao vậy thạch , seri này sao ko có video cho ae nào gà như mình dễ làm theo

Văn Nam

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

49
0
Would love your thoughts, please comment.x
()
x