Code chạy database wordpress trên nền tảng CodeIgniter4. Về cơ bản code này viết bằng CodeIgniter4 dựa theo cấu trúc database của Wordpress để cùng một database có thể điều khiển bằng cả Wordpress.
- Do chạy chung database với Wordpress nên thi thoảng có những thao tác cần xử lý đột xuất với database thì có thể cái code Wordpress vào sub-domain, kết nối vào database và dùng Wordpress để xử lý nó thay vì ngồi code mới -> tận dụng kho plugin khổng lồ của Wordpress.
- Số lượng website sử dụng Wordpress hiện tại rất nhiều, nên nếu một ngày nào đó kiếm được khách có nhu cầu chuyển đổi từ Wordpress sang framework để tăng tốc độ website thì việc cần làm duy nhất là lắp code này vào và chạy nó.
- Cấu trúc database của Wordpress khá là mở và linh động. Hạn chế tối đa việc phải thêm cột vào bảng mỗi khi có trường dữ liệu mới.
- Tính bảo mật phụ thuộc vào trình độ của code nên cần nghiên cứu việc bảo mật đường dẫn cho admin, tránh việc sử dụng các đường dẫn phổ biến như: /admin
- Tài khoản admin cũng cần bảo mật nghiêm ngặt hơn. Riêng phần mật khẩu sẽ sử dụng cột riêng với Wordpress.
- Giải nén file
system
(bản gốc của CodeIgniter4, cập nhật ngày 2021-09-14) hoặc có thể tải CodeIgniter4 mới nhất tại đây: https://codeigniter.com/download rồi lấy thư mục system là được. - Tạo database và import database mẫu từ file database.zip
- Thiết lập các tham số kết nối database
username
,password
,database
tại file này:/app/Config/Database.php
. * nếu chưa có file/app/Config/Database-sample.php
thì copy fileDatabase-sample.php
và đổi tên thànhDatabase.php
. - Truy cập vào phpmyadmin tìm đến bảng
wp_users
và update lại cộtuser_login
,user_email
vàci_pass
để sử dụng (password update thông qua hàmmd5
của phpmyadmin). Update trực tiếp vào tài khoản có ID = 1 hoặc sao chép từ tài khoản đó ra.
- Thiết lập các tham số kết nối database
- Liên kết vào admin:
/wgr-wp-admin
- Liên kết tự động giải nén vendor và đồng bộ database nếu chưa được đồng bộ:
install
hoặc/sync/vendor_sync
(lưu ý: việc chạy link đồng bộ này là bắt buộc để đảm bảo website có đủ cấu trúc database cũng như các code của phần outsource) - Các phần hướng dẫn khác (nếu có) sẽ bổ sung dần dần...
- Do bản code này được re-build từ bản CodeIgniter2 có sẵn của công ty trước đó nên có nhiều function vẫn giữ lại và chưa thay đổi (có nghĩa là nó không tuân theo quy tắc này).
- Các function mới đều được đặt tên theo quy tắc tương tự như của Wordpress hoặc đặc giống như Wordpress luôn. Ví dụ:
the_text()
vàget_the_text()
(phân biệt bởi chữget_
):get_the_text()
là hàm lấy và xử lý dữ liệu sau đóreturn
dữ liệu đã lấy được.the_text()
là hàm sẽ gọi tớiget_the_text()
để lấy dữ liệu và thực hiệnecho
luôn (đỡ phải viết echo).
function get_the_text ( $prams1, $prams2, $prams3 = '' ) {
return md5( $prams1 );
}
function the_text ( $prams1, $prams2, $prams3 = '' ) {
echo get_the_text( $prams1, $prams2, $prams3 );
}
- Ngoài ra, các function có chức năng tương tự với Wordpress sẽ được đặt tên giống với function của Wordpress luôn. Điều này nhằm mục đích giảm bớt thời gian tìm hiểu xem function này dùng để làm gì, hữu ích với những ai đã làm qua code Wordpress. Hoặc khi làm code này mà chuyển sang Wordpress thì cũng đỡ bỡ ngỡ hơn.
$get_data = $this->term_model->get_term_by_id( 1, 'taxonomy' );
- Trong đó:
- Đầu vào là ID của danh mục cần lấy dữ liệu.
- Một mảng chứa thông tin chi tiết của danh sẽ được trả về nếu có dữ liệu tương ứng.
- Một mảng trống sẽ được trả về nếu không có giá trị nào được tìm thấy.
- Đầu vào là ID của danh mục cần lấy dữ liệu.
$get_data = $this->term_model->get_term_by_slug( 'ten-danh-muc', 'taxonomy' );
- Trong đó:
- Đầu vào là slug của danh mục cần lấy dữ liệu.
- Một mảng chứa thông tin chi tiết của danh sẽ được trả về nếu có dữ liệu tương ứng.
- Một mảng trống sẽ được trả về nếu không có giá trị nào được tìm thấy.
- Đầu vào là slug của danh mục cần lấy dữ liệu.
$term_data = [
'term_id' => 1,
'slug' => 'san-pham',
];
$get_data = $this->post_model->get_posts_by( $term_data, [
'limit' => 10,
'offset' => 0,
'order_by' => [
'ID' => 'DESC',
'post_name' => 'ASC',
],
] );
- Trong đó:
$term_data
: là thông tin danh mục sản phẩm hoặc có thể tự tạo một mảng có chứaterm_id
(ưu tiên) hoặcslug
của danh mục đó là được.$ops
- tùy chọn bổ sung (không bắt buộc):limit
: giới hạn số lượng bản ghi muốn lấy.offset
: điểm bắt đầu lấy bản ghi trong mysql.order_by
: muốn sắp xếp theo cột nào trong bảng thì truyền cột đó và kiểu sắp xếpDESC
hoặcASC
vào đây.
$get_data = $this->post_model->get_posts_by( 1, 10 );
$get_data = $this->post_model->get_posts_by( 'san-pham', 10 );
$term_data = [
'term_id' => 1,
'slug' => 'san-pham',
];
$count_data = $this->post_model->count_posts_by( $term_data );
- Trong đó:
$term_data
: là thông tin danh mục sản phẩm hoặc có thể tự tạo một mảng có chứaterm_id
(ưu tiên) hoặcslug
của danh mục đó là được.
$get_data = $this->post_model->count_posts_by( 1 );
$get_data = $this->post_model->count_posts_by( 'san-pham' );
$get_data = $this->post_model->get_products_by( $term_data, [
'limit' => 10,
'offset' => 0,
'order_by' => [
'ID' => 'DESC',
'post_name' => 'ASC',
],
] );
- Tham số và cách sử dụng tương tự với function
get_posts_by
, khác biệt duy nhất là cái tên function.
$get_data = $this->post_model->get_products_by( 2, 10 );
$get_data = $this->post_model->get_products_by( 'tin-tuc', 10 );
$count_data = $this->post_model->count_products_by( $term_data );
- Tham số và cách sử dụng tương tự với function
count_posts_by
, khác biệt duy nhất là cái tên function.
$get_data = $this->post_model->count_products_by( 2 );
$get_data = $this->post_model->count_products_by( 'tin-tuc' );
$get_data = $this->post_model->get_adss_by( $term_data, [
'limit' => 10,
'offset' => 0,
'order_by' => [
'ID' => 'DESC',
'post_name' => 'ASC',
],
] );
- Tham số và cách sử dụng tương tự với function
get_posts_by
, khác biệt duy nhất là cái tên function.
$get_data = $this->post_model->get_adss_by( 3, 10 );
$get_data = $this->post_model->get_adss_by( 'quang-cao', 10 );
$count_data = $this->post_model->count_adss_by( $term_data );
- Tham số và cách sử dụng tương tự với function
count_posts_by
, khác biệt duy nhất là cái tên function.
$get_data = $this->post_model->count_adss_by( 3 );
$get_data = $this->post_model->count_adss_by( 'quang-cao' );
$post_link = $this->post_model->get_post_permalink( $data );
$data
: là dữ liệu của bản ghi cần tạo URL.
$post_thumbnail = $this->post_model->get_post_thumbnail( $data );
$data
: là dữ liệu của bản ghi cần lấy ảnh đại diện.
In ra menu có slug là slug-of-menu
, gắn vào đó 2 class css là class-css1
và class-css2
, nếu menu chưa tồn tại, hệ thống sẽ tự động tạo.
$menu_model->the_menu( 'slug-of-menu', 'class-css1 class-css2' );
In ra 10
banner quảng cáo của nhóm có slug là slug-of-ads-group
, nếu nhóm quảng cáo chưa tồn tại, hệ thống sẽ tự động tạo.
$this->post_model->the_ads( 'slug-of-ads-group', 10 );
In ra logo mobile nếu có, nếu không sẽ in ra logo chính (để trống các tham số phía sau sẽ in ra logo chính).
$option_model->the_logo( $getconfig, 'logo_mobile', 'logo_mobile_height' );
<div data-id="1" data-type="post" class="custom-bootstrap-post_type"></div>
- Trong đó:
data-id
làID
của bài viết.data-type
làpost_type
của bài viết. Ví dụ:post
,ads
,blog
...
<div data-id="1" data-type="category" class="custom-bootstrap-taxonomy"></div>
- Trong đó:
data-id
làID
của danh mục.data-type
làtaxonomy
của danh mục. Ví dụ:category
,blogs
...