Tính năng chính
- Ghi nhớ vị trí đọc bằng localStorage cho khách chưa đăng nhập.
- Lưu vị trí đọc vào user_meta theo từng thiết bị nếu người dùng đã đăng nhập (PC, Mobile, Tablet…).
- Tự động cuộn lại đúng đoạn đã đọc sau khi reload hoặc quay lại bài viết.
- Tùy chỉnh post type được áp dụng qua giao diện cài đặt.
- Không thêm bảng, không tracking, không bloat – hoàn toàn clean và an toàn.
- Không dùng jQuery, viết bằng Vanilla JS hiện đại.
- Hỗ trợ filter
init_plugin_suite_reading_position_delayđể tùy chỉnh thời gian dừng trước khi lưu.
Dành cho cả khách và người dùng đã đăng nhập
- Khách chưa đăng nhập sẽ được lưu bằng localStorage trình duyệt.
- Người dùng đã đăng nhập được lưu vào user_meta theo từng bài viết và từng thiết bị, đảm bảo mỗi thiết bị nhớ đúng vị trí đã đọc của nó.
Tùy chỉnh dễ dàng
- Bạn có thể chọn loại bài viết nào được kích hoạt chức năng này.
- Hỗ trợ filter để dev tùy chỉnh delay lưu vị trí hoặc can thiệp logic lưu theo post_id.
Cài đặt nhanh
- Tải plugin và giải nén vào thư mục
/wp-content/plugins/ - Kích hoạt qua menu Plugins trong admin
- Cấu hình các post type được hỗ trợ tại Settings → Reading Position
- Hoàn tất – plugin tự động hoạt động, không cần thêm shortcode hay block.
Hiệu suất và tương thích
- Tương thích WordPress 5.5 trở lên
- Hỗ trợ PHP 7.4+
- Không phụ thuộc theme, tương thích với mọi giao diện phổ biến
- Code tối ưu, không gây chậm site kể cả bài viết rất dài
Dành cho Developer
- Filter
init_plugin_suite_reading_position_delayđể tùy chỉnh debounce khi lưu vị trí - Filter
init_plugin_suite_reading_position_meta_keyđể tùy chỉnh tên meta key lưu - Filter
init_plugin_suite_reading_position_data_to_stoređể can thiệp nội dung lưu - Filter
init_plugin_suite_reading_position_should_deleteđể quyết định có xoá vị trí đọc khi cuộn tới cuối - Filter
init_plugin_suite_reading_position_localized_datađể truyền thêm dữ liệu sang JS
Ví dụ sử dụng các filter mở rộng:
// Thay đổi thời gian debounce (mặc định: 1000ms)
add_filter('init_plugin_suite_reading_position_delay', fn() => 2000); // 2 giây
// Tuỳ chỉnh tên meta_key dùng để lưu vị trí đọc
add_filter('init_plugin_suite_reading_position_meta_key', function ($key, $post_id, $device) {
return "_custom_rp_{$post_id}_{$device}"; // Ví dụ: _custom_rp_123_PC
}, 10, 3);
// Can thiệp dữ liệu sẽ lưu vào user_meta (mặc định gồm scrollTop, percent, screenHeight, updated)
add_filter('init_plugin_suite_reading_position_data_to_store', function ($data, $post_id, $device, $user_id) {
$data['ip'] = $_SERVER['REMOTE_ADDR'] ?? ''; // Lưu thêm IP người dùng (tuỳ mục đích)
return $data;
}, 10, 4);
// Quyết định có xoá dữ liệu vị trí đọc khi người dùng cuộn tới cuối hay không
add_filter('init_plugin_suite_reading_position_should_delete', fn($yes) => false); // Không xoá, giữ lại để đọc lại lần sau
// Bổ sung dữ liệu truyền sang JS (InitRPData)
add_filter('init_plugin_suite_reading_position_localized_data', function ($data, $post_id) {
$data['debug'] = current_user_can('manage_options'); // Gửi thêm biến debug nếu là admin
return $data;
});
Bắt đầu ngay
Bạn đang làm blog, web truyện, tạp chí số hay long-form content? Init Reading Position sẽ mang đến trải nghiệm người đọc mượt mà hơn bao giờ hết – nhẹ, thông minh và hoàn toàn tự động.