add_action()

action hook add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ): true

Thêm một hành động vào hook.

function add_action( $hook_name, $callback, $priority = 10, $accepted_args = 1 ) {
	return add_filter( $hook_name, $callback, $priority, $accepted_args );
}
Ví dụ 1: Thêm quyền mới là custom_role
function create_custom_role() {
    add_role(
        'custom_role',
        'Custom Role', // Tên vai trò
        [
            'read' => true,                  // Cho phép đọc nội dung
            'edit_posts' => true,           // Cho phép chỉnh sửa bài viết của mình
            'delete_posts' => false,        // Không được xóa bài viết
        ]
    );
}
add_action('init', 'create_custom_role');
Ví dụ 2: Xóa quyền xóa bài viết đã xuất bản
function remove_capability_from_author() {
    $role = get_role('author');
    $role->remove_cap('delete_published_posts'); // Xóa quyền xóa bài viết đã xuất bản
}
add_action('init', 'remove_capability_from_author');
Ví dụ 3: Thêm quyền quản lý cài đặt
function add_custom_capability_to_editor() {
    $role = get_role('editor');
    $role->add_cap('manage_options'); // Thêm quyền quản lý cài đặt
}
add_action('init', 'add_custom_capability_to_editor');
Ví dụ 4: Bảo vệ các tệp trong thư mục uploads, bạn có thể sử dụng filter wp_get_attachment_url để kiểm tra quyền trước khi cho phép truy cập.
add_filter('wp_get_attachment_url', function ($url, $post_id) {
    // Kiểm tra người dùng
    $current_user = wp_get_current_user();
    $allowed_roles = ['administrator', 'editor'];

    if (!array_intersect($allowed_roles, $current_user->roles)) {
        return home_url('/no-access/'); // Chuyển hướng nếu không có quyền
    }

    return $url;
}, 10, 2);
Kiểm tra quyền của user trước khi truy cập folder wp-content/uploads
Ví dụ 5: Kiểm tra quyền truy cập trước khi tải nội dung trong một đường dẫn cụ thể
add_action('template_redirect', function () {
    // Đường dẫn cần bảo vệ
    $protected_folder = '/wp-content/uploads/protected-folder/';
    
    // Kiểm tra URL truy cập
    if (strpos($_SERVER['REQUEST_URI'], $protected_folder) !== false) {
        $current_user = wp_get_current_user();
        $allowed_roles = ['administrator', 'editor'];
        
        // Kiểm tra quyền truy cập
        if (empty($current_user->ID) || !array_intersect($allowed_roles, $current_user->roles)) {
            wp_die('Bạn không có quyền truy cập vào thư mục này.');
        }
    }
});
Nếu user không có quyền 'administrator', 'editor' thì không thể truy cập
Ví dụ 6: Thêm cột cho database đã có sẵn, trong ví dụ là thêm cột date_create và date_update tự lấy thời gian hiện tại của hệ thống
function update_table_structure() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'your_table';

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id INT(11) NOT NULL AUTO_INCREMENT,
        column1 VARCHAR(255) NOT NULL,
        date_create DATETIME DEFAULT CURRENT_TIMESTAMP,
        date_update DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        PRIMARY KEY (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
add_action('init', 'update_table_structure');
Tạo thành công 2 cột date_create và date_update
Ví dụ 7: Thay đổi URL đăng nhập
add_action('login_init', function () {
        if ($_SERVER['REQUEST_URI'] === [link_can_thay-doi]) {
            require_once ABSPATH . 'wp-login.php';
            exit;
        } elseif (strpos($_SERVER['REQUEST_URI'], '/wp-login.php') !== false) {
            wp_redirect(home_url());
            exit;
        }
    });
Thay đổi URL đăng nhập là [link_can_thay-doi]
Ví dụ 8: Kiểm tra nếu không phải admin thì ẩn menu ngang
add_action('after_setup_theme', function(){
    if (!current_user_can('administrator')) {
        show_admin_bar(false);
    }
});
Ẩn menu ngang nếu không phải là administrator
Ví dụ 9: Vô hiệu hóa tệp comment-reply.js
function disable_comment_reply_script() {
    if (is_singular() && comments_open() && get_option('thread_comments')) {
        wp_deregister_script('comment-reply');
    }
}
add_action('wp_enqueue_scripts', 'disable_comment_reply_script');
Không load file comment-reply.js