Xóa bỏ /product-category/ và /product/ khỏi woocomerce

  1. Xóa bỏ /product-category/

Code xóa bỏ product-category và bỏ toàn bộ slug của danh mục cha ra khỏi đường dẫn tĩnh

Chỉ cần cho đoạn code sau vào file functions.php của theme đang sử dụng. Sau đó vào update lại permalink tại Setting->Permalink->Save Change.

// Remove product cat base
add_filter('term_link', 'devvn_no_term_parents', 1000, 3);
function devvn_no_term_parents($url, $term, $taxonomy) {
    if($taxonomy == 'product_cat'){
        $term_nicename = $term->slug;
        $url = trailingslashit(get_option( 'home' )) . user_trailingslashit( $term_nicename, 'category' );
    }
    return $url;
}
// Add our custom product cat rewrite rules
function devvn_no_product_cat_parents_rewrite_rules($flash = false) {
    $terms = get_terms( array(
        'taxonomy' => 'product_cat',
        'post_type' => 'product',
        'hide_empty' => false,
    ));
    if($terms && !is_wp_error($terms)){
        foreach ($terms as $term){
            $term_slug = $term->slug;
            add_rewrite_rule($term_slug.'/?$', 'index.php?product_cat='.$term_slug,'top');
            add_rewrite_rule($term_slug.'/page/([0-9]{1,})/?$', 'index.php?product_cat='.$term_slug.'&paged=$matches[1]','top');
            add_rewrite_rule($term_slug.'/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?product_cat='.$term_slug.'&feed=$matches[1]','top');
        }
    }
    if ($flash == true)
        flush_rewrite_rules(false);
}
add_action('init', 'devvn_no_product_cat_parents_rewrite_rules');
/*Sửa lỗi khi tạo mới taxomony bị 404*/
add_action( 'create_term', 'devvn_new_product_cat_edit_success', 10);
add_action( 'edit_terms', 'devvn_new_product_cat_edit_success', 10);
add_action( 'delete_term', 'devvn_new_product_cat_edit_success', 10);
function devvn_new_product_cat_edit_success( ) {
    devvn_no_product_cat_parents_rewrite_rules(true);
}

2. Xóa bỏ /product/

  • Copy và dán đúng cú pháp PHP. Nhiều bạn có cái dấu mở PHP (<?php) tống cả vào mà không để ý rồi lỗi cả web cứ inbox bảo code làm sao … em buồn lắm các bác ạ 🙂
  • Tại dòng số 11 trong code bên dưới đang để là /cua-hang/ các bạn thay chữ đó thành slug hiện tại của web… vào Setting -> Permalink để kiểm tra slug hiện tại là gì (thường là /product/ hoặc /shop/ …)
/*
* Code Bỏ /product/ hoặc /cua-hang/ hoặc /shop/ … có hỗ trợ dạng %product_cat%
* Thay /cua-hang/ bằng slug hiện tại của bạn
*/
function devvn_remove_slug( $post_link, $post ) {
if ( !in_array( get_post_type($post), array( product ) ) || publish != $post->post_status ) {
return $post_link;
}
if(product == $post->post_type){
$post_link = str_replace( ‘/cua-hang/’, /, $post_link ); //Thay cua-hang bằng slug hiện tại của bạn
}else{
$post_link = str_replace( / . $post->post_type . /, /, $post_link );
}
return $post_link;
}
add_filter( post_type_link, devvn_remove_slug, 10, 2 );
/*Sửa lỗi 404 sau khi đã remove slug product hoặc cua-hang*/
function devvn_woo_product_rewrite_rules($flash = false) {
global $wp_post_types, $wpdb;
$siteLink = esc_url(home_url(/));
foreach ($wp_post_types as $type=>$custom_post) {
if($type == product){
if ($custom_post->_builtin == false) {
$querystr = SELECT {$wpdb->posts}.post_name, {$wpdb->posts}.ID
FROM {$wpdb->posts}
WHERE {$wpdb->posts}.post_status = ‘publish’
AND {$wpdb->posts}.post_type = ‘{$type}’;
$posts = $wpdb->get_results($querystr, OBJECT);
foreach ($posts as $post) {
$current_slug = get_permalink($post->ID);
$base_product = str_replace($siteLink,,$current_slug);
add_rewrite_rule($base_product.?$, index.php?{$custom_post->query_var}={$post->post_name}, top);
add_rewrite_rule($base_product.comment-page-([0-9]{1,})/?$, index.php?.$custom_post->query_var.=.$post->post_name.&cpage=$matches[1], top);
add_rewrite_rule($base_product.(?:feed/)?(feed|rdf|rss|rss2|atom)/?$, index.php?.$custom_post->query_var.=.$post->post_name.&feed=$matches[1],top);
}
}
}
}
if ($flash == true)
flush_rewrite_rules(false);
}
add_action(init, devvn_woo_product_rewrite_rules);
/*Fix lỗi khi tạo sản phẩm mới bị 404*/
function devvn_woo_new_product_post_save($post_id){
global $wp_post_types;
$post_type = get_post_type($post_id);
foreach ($wp_post_types as $type=>$custom_post) {
if ($custom_post->_builtin == false && $type == $post_type) {
devvn_woo_product_rewrite_rules(true);
}
}
}
add_action(wp_insert_post, devvn_woo_new_product_post_save);

9 CÁCH HẠN CHẾ LOCAL ATTACK TRONG WORDPRESS

1. Giấu file wp-config.php

Mặc dù có một vài shell như Coleil có thể dò ra file config của mã nguồn dù bạn có giấu ở đâu nhưng việc cất kỹ file nhạy cảm này cũng sẽ giúp bạn hạn chế phần nào, ít ra là các hacker “thực tập”.

Trong host linux, thông thường các tập tin của website sẽ đều nằm trong thư mục public_html và thường path sẽ là /home/username/public_html/wp-config.php.

Do đó, cách giấu file config tốt nhất là bạn nên đưa file wp-config.php ra khỏi thư mục public_html, bạn có thể đăng nhập vào host thông qua FTP và tạo thêm một thư mục tên bất kỳ nằm ngang hàng với public_html.

Sau đó tải file wp-config.php trong thư mục public_html và upload nó vào thư mục mới tạo. Cuối cùng là sửa file wp-config.php trong thư mục public_html thành như sau, xem liên kết ở dưới:

01
02
03
04
05
<br />
&lt;php<br />
  if ( !defined('ABSPATH') )<br />
    define('ABSPATH', dirname(__FILE__) . '/');<br />
  require_once(ABSPATH . '../baomat/wp-config.php');<br />

2. Thay đổi database prefix

Database prefix (tiền tố CSDL) mặc định của WordPress sẽ là wp_, điều này vô tình làm cho các hacker biết rõ tên của từng table của website bạn nếu bạn không đổi tiền tố này đi.

Cách đổi tiền tố có nhiều cách, nhưng tốt hơn hết là sử dụng plugin iThemes Security để đổi, nhớ backup lại toàn bộ dữ liệu trước khi làm nhé mặc dù mình làm rất nhiều lần mà không bị lỗi.

3. Đổi security key

Bạn thử mở file wp-config.php ra, kéo xuống dưới và có thấy một đoạn nội dung giống thế này?

01
02
03
04
05
06
07
08
define('AUTH_KEY', 'jpwfcb9izge9gnz9unoakwpovdtn754sekxebbs5zvdzgl187lftu51o6qucv6py');<br />
define('SECURE_AUTH_KEY', 'lqodqrrfksxmn8qsy6i3kwshu7su1czmnt6xj6wtpx54er9c5dmweqptupwzzfpa');<br />
define('LOGGED_IN_KEY', 'pxo6nd6mnfw04m3u0m38layynhrh7atesuqgonitzf0xxnqxyydqpfurqr3znsoi');<br />
define('NONCE_KEY', 'bhlrnqwfoxfzhpcyhyqlo8jh7vhdh3ov4swgsmygwvfzx8q65hmilhwt4iylgkd8');<br />
define('AUTH_SALT', 'prfbyplbizqiqu1i42hm622ovsznaoayr9abxcbz15xks54nnkhguzqhwkndzy6v');<br />
define('SECURE_AUTH_SALT', 'erjzw2objjfmachy7vt9mq2ktufh2331ypnuaeanjl1oegorjrngvzvcrftnywkd');<br />
define('LOGGED_IN_SALT', 'kpvryyyj1zwznarx4l8lloigurf9mqetnlojnxtygjhuqtj9acq4lpr5jsm2kyjg');<br />
define('NONCE_SALT', 'arimerdvr8fbw7pkigotdb7psvc2ysa7bqrnunrzwbcqlkqhs6xzokhzwnrmsg3a');

Bên trên là các chuỗi ký tự ngẫu nhiên lưu lại các session của từng user khi đăng nhập vào bảng điều khiển Admin. Hãy chắc chắn rằng bạn đã nhập ký tự ngẫu nhiên cho các key trên. Bạn có thể truy cập vào đây để tự động tạo ra các chuỗi security key ngẫu nhiên sau mỗi lần F5 rồi copy vào.

Cũng nên lưu ý rằng, nếu website bạn đã đang bị hack thì cũng nên đổi lại key này vài lần trong tuần để đảm bảo

CÁCH CHMOD AN TOÀN CHO WORDPRESS

CHMOD an toàn cho tập tin PHP

Như bạn biết đối với tập tin PHP thì quyền cao nhất là 6 (ghi và đọc) nên cách CHMOD chuẩn dành cho toàn bộ tập tin PHP trên mã nguồn website WordPress phải là 644 để website bạn có thể hoạt động bình thường.

Riêng một số tập tin nhạy cảm như wp-config.php.htaccess thì nên CHMOD thành 400 hoặc 600, tức là không cấp quyền ghi cho bất cứ ai ngoại trừ chính bạn sửa các tập tin đó trực tiếp.

Tuy nhiên khi CHMOD thành 400, mỗi khi cài plugin mà nó cần bạn sửa file như .htaccess, wp-config.php thì bạn phải tự sửa thủ công. Thành ra nếu muốn không bị như vậy thì có thể CHMOD là 600.

CHMOD an toàn cho thư mục

Đối với thư mục, quyền cao nhất là sẽ 7 vì ngoài đọc, ghi thì nó còn có quyền truy cập. Do vậy, CHMOD chuẩn dành cho các thư mục để website WordPress bạn hoạt động tốt là 755.

Tuy nhiên bạn có thể CHMOD lại thư mục wp-admin và wp-include là 700. Nhưng hãy lưu ý rằng, bạn phải cập nhật phiên bản WordPress mới thủ công vì nó không thể tự ghi đè các tập tin vào.

Cài đặt VPS

Install VPS:

curl -sO https://hocvps.com/install && bash install

Install WordPress:

curl -sO https://hocvps.com/scripts/wp && bash wp

Tạo “swap” trước khi cài hocvps, mục đích: Swap là khái niệm bộ nhớ ảo được sử dụng trên hệ điều hành Linux. Khi VPS/Server hoạt động, nếu hết RAM hệ thống sẽ tự động sử dụng một phần ổ cứng để làm bộ nhớ cho các ứng dụng hoạt động

  1. Kiểm tra swap:
swapon -s
2.Kiểm tra dung lượng còn trống của VPS
df -h
3. Tạo Swap
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
– Tạo phân vùng swap
mkswap /swapfile

– Kích hoạt swap

swapon /swapfile

– Kiểm tra lại tình trạng swap bạn sẽ thấy như sau:

swapon -s

– Thiết lập swap tự động được kích hoạt mỗi khi reboot

echo /swapfile none swap defaults 0 0 >> /etc/fstab

– Bảo mật file swap bằng cách chmod

chown root:root /swapfile 
chmod 0600 /swapfile

4. Cấu hình Swappiness

– Kiểm tra mức độ sử dụng file swap của hệ thống bằng cách chạy dòng lệnh sau

cat /proc/sys/vm/swappiness

– Chỉnh thông số swappiness bằng cách dùng lệnh sysctl

sysctl vm.swappiness=10

– Kiểm tra lại bạn sẽ thấy kết quả trả về 10

cat /proc/sys/vm/swappiness

Để đảm bảo giữ nguyên thông số này mỗi khi khởi động lại VPS bạn cần điều chỉnh tham số vm.swappiness ở cuối file /etc/sysctl.conf (nếu không có bạn hãy add thủ công vào bằng FTP)

nano /etc/sysctl.conf

Thêm dòng sau vào cuối nếu chưa có, nếu có rồi thì update lại giá trị:

vm.swappiness = 10

– Khởi động lại VPS và kiểm tra lại kết quả:

swapon -s
cat /proc/sys/vm/swappiness