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.2 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_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

  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
  • 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.

Đánh giá

5.0/5 (7)

Changelog

  • 1.2 – Multi-selector & tự động xoá vị trí khi hết nội dung
    • Hỗ trợ nhiều CSS Selector cùng lúc — ví dụ: .entry-content, .post-content, #main.
    • Tiến trình đọc được theo dõi khi người dùng ở trong bất kỳ selector nào đã cấu hình.
    • Tự động xóa vị trí đọc khi kéo đến cuối vùng nội dung (selector).
    • Nếu tắt auto-clear theo selector, plugin sẽ quay về behavior cũ: xoá khi chạm đáy trang.
    • Tính toán phần trăm tiến trình ưu tiên selector đang ở trong phạm vi, fallback về trang khi ngoài mọi vùng.
    • Thêm tuỳ chọn mới trong trang cài đặt: “Auto-clear saved position at content end” (mặc định bật).
    • Không phá logic hiện tại: localStorage + user_meta giữ nguyên, không mất dữ liệu.
    • Hoàn thiện i18n cho tất cả string mới (EN + VI).
  • 1.1 – Hỗ trợ Selector & theo dõi tiến trình trong vùng nội dung
    • Thêm tuỳ chọn CSS Selector để chỉ theo dõi vị trí đọc trong vùng mong muốn (ví dụ: .entry-content).
    • Chỉ lưu tiến trình khi người dùng đang cuộn trong vùng selector — không lưu khi sang phần bình luận.
    • Xoá tiến trình đọc chỉ khi cuộn đến cuối trang, bất kể selector.
    • Không thay đổi logic lưu cũ: localStorage đối với khách & user_meta đối với user đăng nhập.
    • Giữ nguyên toàn bộ cấu trúc dữ liệu cũ — không gây lỗi hoặc mất dữ liệu ở phiên bản trước.
    • Trang cài đặt được bổ sung trường input selector (placeholder, mặc định rỗng).
    • Hoàn thiện i18n (tiếng Anh & tiếng Việt) cho string mới trong setting.
    • Code tối ưu & sạch — không thêm scripts hoặc assets thừa.
  • 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_plugin_suite_reading_position_delay, init_plugin_suite_reading_position_meta_key, init_plugin_suite_reading_position_data_to_store, init_plugin_suite_reading_position_should_delete, init_plugin_suite_reading_position_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.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...