Init Reading Position – Plugin ghi nhớ vị trí đọc, tự động cuộn lại khi người dùng quay lại bài viết

Phiên bản: 1.0 English version

Init Reading Position – Plugin ghi nhớ vị trí đọc, tự động cuộn lại khi người dùng quay lại bài viết
Init Reading Position là một plugin WordPress giúp người dùng quay lại đúng vị trí đã đọc trong bài viết trước đó. Khi người dùng cuộn qua bài viết, plugin sẽ tự động ghi nhớ vị trí và tự động cuộn lại vị trí đó khi họ quay lại – kể cả khi đã đăng nhập hay không. Được thiết kế siêu nhẹ, không dùng jQuery, không làm chậm website, hoàn toàn bằng JavaScript thuần và REST API nếu người dùng đã đăng nhập.

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_rp_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

  1. Tải plugin và giải nén vào thư mục /wp-content/plugins/
  2. Kích hoạt qua menu Plugins trong admin
  3. Cấu hình các post type được hỗ trợ tại Settings → Reading Position
  4. 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
  • Đã test trên phiên bản mới nhất 6.8
  • 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_rp_delay để tùy chỉnh debounce khi lưu vị trí
  • Filter init_rp_meta_key để tùy chỉnh tên meta key lưu
  • Filter init_rp_data_to_store để can thiệp nội dung lưu
  • Filter init_rp_should_delete để quyết định có xoá vị trí đọc khi cuộn tới cuối
  • Filter init_rp_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_rp_delay', fn() => 2000); // 2 giây

// Tuỳ chỉnh tên meta_key dùng để lưu vị trí đọc
add_filter('init_rp_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_rp_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_rp_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_rp_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.

Changelog

  • 1.0 – Phiên bản đầu tiên của Init Reading Position
    • Ghi nhớ vị trí đọc của người dùng trong bài viết và tự động cuộn lại khi quay lại.
    • Lưu vị trí bằng localStorage nếu người dùng chưa đăng nhập.
    • Lưu vị trí bằng user_meta nếu người dùng đã đăng nhập – theo từng thiết bị.
    • Tự động preload vị trí từ user_meta để tránh gọi REST API không cần thiết.
    • Xoá vị trí đã lưu nếu người dùng cuộn gần cuối bài viết hoặc quay lại đầu trang.
    • Tùy chọn bật/tắt tính năng theo từng post type qua trang cài đặt.
    • Không dùng jQuery, code nhẹ bằng JavaScript thuần.
    • Không tạo bảng trong database, không ghi đè dữ liệu plugin khác.
    • Hỗ trợ các filter: init_rp_delay, init_rp_meta_key, init_rp_data_to_store, init_rp_should_delete, init_rp_localized_data.
    • Plugin sạch, nhẹ, dễ mở rộng, phù hợp mọi loại nội dung dài như blog, truyện, tạp chí.
Made with in HCMC.

Bình luận


  • Không có bình luận.