Mô tả
Init View Count là một plugin nhanh, gọn gàng để theo dõi lượt xem bài viết mà không gây rối. Plugin này:
- Dùng REST API và JS để đếm lượt xem thực
- Ngăn đếm trùng lặp bằng session/local storage
- Lưu lượt đếm trong các meta key như
_init_view_count,_init_view_day_count, v.v. - Cung cấp shortcode
[init_view_count]và[init_view_list] - Kèm theo shortcode
[init_view_ranking]với bảng xếp hạng dạng tab theo khoảng thời gian - Hỗ trợ ghi đè mẫu (giống như WooCommerce)
- Nhẹ. Không theo dõi người dùng, không làm cồng kềnh trang quản trị.
- Kèm theo REST API để truy vấn các bài viết được xem nhiều nhất
- Hỗ trợ phân trang trong
[init_view_list]qua thuộc tínhpage - Hỗ trợ theo dõi lượt xem theo lô để giảm số yêu cầu REST trên các site đông người truy cập
- Tùy chọn lọc nghiêm ngặt dựa trên IP để chặn các yêu cầu xem giả gửi trực tiếp đến endpoint REST
- Kèm theo widget Dashboard để theo dõi các bài viết được xem nhiều nhất ngay trong wp-admin
- Học mẫu hình lưu lượng truy cập toàn site (theo giờ & theo ngày trong tuần) qua kỹ thuật làm mượt dùng AI
- Các mẫu hình được lưu đệm và cập nhật hiệu quả với chi phí tối thiểu
- Hành động đặt lại an toàn để tự động xây dựng lại các mẫu hình
- Tích hợp đầy đủ với Trending Engine v3 để chấm điểm dựa trên mức tăng trưởng
- Hỗ trợ Block Editor (Gutenberg) gốc với 3 block riêng, không cần bước build
- Hỗ trợ Abilities API (WordPress 6.9+) — các ability chỉ đọc dành cho AI agent và công cụ tự động
- Chế độ tùy chọn “Reduce view count cache refreshes” (Giảm tần suất làm mới bộ nhớ tạm lượt xem) dành cho các trang web lượng truy cập cao chạy bộ nhớ tạm đối tượng bền vững (Redis, Memcached)
Plugin này là một phần của Init Plugin Suite — bộ sưu tập các công cụ WordPress tối giản, nhanh, và hướng tới lập trình viên.
Kho GitHub: https://github.com/brokensmile2103/init-view-count
Điểm nổi bật
- Thiết kế ưu tiên REST — không jQuery hay Ajax kiểu cũ
- Theo dõi lượt xem vận hành bằng phát hiện thời gian + cuộn trang
- Hiển thị theo thời gian thực với bộ đếm hoạt hình tùy chọn
- Tương thích hoàn toàn với theme, với các mẫu có thể ghi đè
- Thân thiện với lập trình viên với hỗ trợ filter phong phú
- Shortcode
[init_view_ranking]tùy chọn để xem dạng tab theo ngày/tuần/tháng/tổng - Tài nguyên chỉ được tải khi cần – hoàn hảo cho các theme chú trọng hiệu năng
- Tương thích hoàn toàn với các framework headless và SPA (ưu tiên REST + tải chậm)
- Hỗ trợ chế độ theo lô: trì hoãn các yêu cầu xem và gửi theo nhóm (có thể cấu hình trong cài đặt)
- Kèm theo widget Dashboard tùy chọn để quản trị viên nhanh chóng xem tổng quan các bài viết được xem nhiều nhất
- Traffic Shape Learner dùng AI – hiểu được nhịp điệu theo giờ & theo tuần của site bạn
- Tự động tích hợp với Trending Engine v3 để phát hiện tăng trưởng có nhận biết tính mùa vụ
- Cơ chế dự phòng thông minh (ngày tuần tháng tổng) đảm bảo bảng xếp hạng không bao giờ trống
- Cực kỳ nhẹ: chỉ 1 lượt ghi cho mỗi lần tăng + 1 lượt tổng hợp mỗi ngày, thiết kế ưu tiên bộ nhớ đệm
Shortcode
[init_view_count]
Hiển thị số lượt xem của bài viết hiện tại, hoặc của bất kỳ bài viết nào thông qua thuộc tính id.
Thuộc tính:
– id: ID bài viết cần hiển thị (mặc định: bài viết hiện tại)
– field: total (mặc định), day, week, month – chọn bộ đếm cần hiển thị
– format: formatted (mặc định), raw, hoặc short – điều khiển định dạng số
– time: true để hiển thị khoảng thời gian so với ngày đăng (ví dụ: “3 ngày trước”)
– icon: true để hiển thị một biểu tượng SVG nhỏ trước số lượt xem
– schema: true để xuất vi dữ liệu schema.org (InteractionCounter)
– class: thêm class CSS tùy chỉnh cho thẻ bao bọc bên ngoài
[init_view_list]
Hiển thị danh sách các bài viết được xem nhiều nhất.
Thuộc tính:
– number: Số lượng bài viết muốn hiển thị (mặc định: 10)
– page: Hiển thị một trang kết quả cụ thể (mặc định: 1)
– post_type: Loại bài viết (mặc định: post)
– template: sidebar (mặc định), full, grid, details (có thể ghi đè)
– title: Tiêu đề phía trên danh sách. Đặt thành rỗng (title="") để ẩn
– class: Class tùy chỉnh thêm vào thẻ bao bọc
– orderby: Trường sắp xếp (mặc định: meta_value_num)
– order: ASC hoặc DESC (mặc định: DESC)
– range: total, day, week, month, trending
– category: Lọc theo slug của chuyên mục
– tag: Lọc theo slug của thẻ tag
– empty: Thông báo hiển thị khi không tìm thấy bài viết nào
[init_view_ranking]
Hiển thị bảng xếp hạng dạng tab cho các bài viết được xem nhiều nhất. Dùng REST API và JavaScript để tải động. Được tối ưu cho SPA/headless.
Thuộc tính:
– tabs: Danh sách các khoảng thời gian phân cách bằng dấu phẩy. Khả dụng: total, day, week, month, yesterday, last_week, last_month (mặc định: total,day,week,month)
– number: Số bài viết trên mỗi thẻ tab (mặc định: 5)
– post_type: (Các) loại bài viết phân cách bằng dấu phẩy để xếp hạng (mặc định: post và page)
– class: Class tùy chỉnh cho thẻ bao bọc bên ngoài
Shortcode này tự động enqueue JS cần thiết và dùng khung tải (skeleton loader) trong khi lấy dữ liệu.
REST API
Plugin này cung cấp hai endpoint REST để tương tác với lượt xem: một để ghi nhận lượt xem và một để lấy các bài viết hàng đầu.
POST /wp-json/initvico/v1/count
Ghi nhận một hoặc nhiều lượt xem. Chấp nhận một ID bài viết đơn lẻ hoặc một mảng ID bài viết.
Tham số:
– post_id — (số nguyên|mảng) Bắt buộc. Một hoặc nhiều ID bài viết để tăng lượt xem.
Endpoint này kiểm tra xem bài viết đã được xuất bản hay chưa, có thuộc loại bài viết được hỗ trợ hay không, và áp dụng cấu hình trì hoãn/cuộn (qua JavaScript). Nó cập nhật bộ đếm tổng và tùy chọn cả bộ đếm ngày/tuần/tháng.
Lưu ý: Số lượng ID bài viết được xử lý mỗi yêu cầu bị giới hạn dựa trên cài đặt lô trong tùy chọn plugin.
Tùy chọn: nếu “Yêu cầu xác thực nonce REST?” được bật trong cài đặt plugin, endpoint này cũng yêu cầu một header X-WP-Nonce hợp lệ (action wp_rest). Tùy chọn này tắt theo mặc định — xem phần FAQ bên dưới trước khi bật.
GET /wp-json/initvico/v1/top
Lấy các bài viết được xem nhiều nhất, xếp hạng theo lượt xem.
Tham số:
– range — (string) total, day, week, month, yesterday, last_week, last_month, trending. Mặc định là total.
– post_type — (string) (Các) loại bài viết phân cách bằng dấu phẩy để truy vấn. Chỉ chấp nhận các loại bài viết hiện có và có thể xem công khai. Mặc định là post và page.
– number — (int) Số lượng bài viết trả về. Mặc định: 5, tối đa 100 (có thể lọc qua init_plugin_suite_view_count_api_top_max_number).
– page — (int) Số trang. Mặc định: 1.
– fields — (string) minimal (id, tiêu đề, liên kết) hoặc full (bao gồm đoạn trích, ảnh đại diện, loại bài viết, ngày tháng, v.v.)
– tax — (string) Tùy chọn. Slug của phân loại / taxonomy (ví dụ: category).
– terms — (string) Các slug hoặc ID của thuật ngữ/chuyên mục phân cách bằng dấu phẩy.
– no_cache — (bool) Nếu là 1, sẽ tắt lưu bộ nhớ tạm transient.
Endpoint này hỗ trợ lọc và lưu đệm, và có thể mở rộng để hỗ trợ các định dạng xuất ra tùy chỉnh.
Filter dành cho lập trình viên
Plugin này cung cấp nhiều filter giúp lập trình viên tùy chỉnh hành vi và kết quả xuất ra trong cả REST API lẫn shortcode.
init_plugin_suite_view_count_should_count
Cho phép hoặc ngăn việc đếm lượt xem cho một bài viết cụ thể.
Áp dụng cho: REST /count
Tham số: bool $should_count, int $post_id, WP_REST_Request $request
init_plugin_suite_view_count_meta_key
Thay đổi meta key dùng để đọc hoặc ghi lượt xem.
Áp dụng cho: REST & Shortcode
Tham số: string $meta_key, int|null $post_id
init_plugin_suite_view_count_after_counted
Chạy logic tùy chỉnh sau khi lượt xem đã được tăng.
Áp dụng cho: REST /count
Tham số: int $post_id, array $updated, WP_REST_Request $request
init_plugin_suite_view_count_api_top_args
Tùy chỉnh các tham số WP_Query dùng cho endpoint /top.
Áp dụng cho: REST /top
Tham số: array $args, WP_REST_Request $request
init_plugin_suite_view_count_api_top_item
Chỉnh sửa từng mục trước khi được trả về trong phản hồi /top.
Áp dụng cho: REST /top
Tham số: array $item, WP_Post $post, WP_REST_Request $request
init_plugin_suite_view_count_api_top_cache_time
Điều chỉnh thời gian lưu đệm (tính bằng giây) cho kết quả /top.
Áp dụng cho: REST /top
Tham số: int $ttl, WP_REST_Request $request
init_plugin_suite_view_count_api_top_max_number
Số lượng mục tối đa mà /top trả về cho mỗi yêu cầu (mặc định 100).
Áp dụng cho: REST /top
Tham số: int $max, WP_REST_Request $request
init_plugin_suite_view_count_ip_headers
Danh sách các khóa $_SERVER được kiểm tra, theo thứ tự, để phát hiện IP người truy cập cho tính năng kiểm tra IP nghiêm ngặt.
Áp dụng cho: REST /count (Kiểm tra IP nghiêm ngặt)
Tham số: array $headers
init_plugin_suite_view_count_meta_flush_interval
Số giây tối thiểu giữa hai lần làm mới bộ nhớ tạm meta của bài viết sau khi đếm lượt xem, khi bật Reduce view count cache refreshes và bộ nhớ tạm đối tượng bền vững đang hoạt động. Trả về 0 để làm mới sau mỗi lượt xem.
Áp dụng cho: REST /count
Tham số: int $interval (đã được giới hạn trong khoảng 10–600 của cài đặt)
init_plugin_suite_view_count_top_post_types
Tùy chỉnh danh sách loại bài viết được trả về bởi endpoint /top.
Áp dụng cho: REST /top
Tham số: array $post_types, WP_REST_Request $request
init_plugin_suite_view_count_query_args
Lọc các tham số WP_Query cho shortcode [init_view_list].
Áp dụng cho: [init_view_list]
Tham số: array $args, array $atts
init_plugin_suite_view_count_empty_output
Tùy chỉnh kết quả HTML xuất ra khi không tìm thấy bài viết nào.
Áp dụng cho: [init_view_list]
Tham số: string $output, array $atts
init_plugin_suite_view_count_view_list_atts
Chỉnh sửa thuộc tính shortcode trước khi WP_Query được chạy.
Áp dụng cho: [init_view_list]
Tham số: array $atts
init_plugin_suite_view_count_default_shortcode
Tùy chỉnh shortcode mặc định dùng khi tự động chèn lượt xem vào nội dung bài viết.
Áp dụng cho: Tự động chèn [init_view_count]
Tham số: string $shortcode
init_plugin_suite_view_count_auto_insert_enabled
Kiểm soát việc tự động chèn có được bật cho một ngữ cảnh cụ thể hay không.
Áp dụng cho: Tự động chèn [init_view_count]
Tham số: bool $enabled, string $position, string $post_type
init_plugin_suite_view_count_engagement_meta_keys
Thay đổi meta key dùng để lấy số lượt like và share khi tính toán chất lượng tương tác.
Áp dụng cho: Thuật toán tương tác (Engagement)
Tham số: array $meta_keys (likes, shares), int $post_id
init_plugin_suite_view_count_trending_post_types
Ghi đè danh sách loại bài viết được dùng trong tính toán cron Trending.
Áp dụng cho: Cron Trending
Tham số: array $post_types
init_plugin_suite_view_count_trending_component_weights
Điều chỉnh trọng số cho các thành phần điểm số Xu hướng (Trending).
Áp dụng cho: Thuật toán Trending
Tham số: array $weights (velocity, engagement, freshness, momentum, uplift, ewma, fatigue, explore, mmr)
init_plugin_suite_view_count_shape_sample_rate
Tỷ lệ lấy mẫu N được sử dụng khi bật Sample Traffic Shape writes: dữ liệu mô hình lưu lượng được ghi lại từ 1 trong N yêu cầu lượt xem, mỗi mẫu được tính trọng số N lần. Trả về 1 để ghi lại mọi yêu cầu.
Áp dụng cho: Traffic Shape Learner (Bộ học mô hình lưu lượng)
Tham số: int $rate (đã được giới hạn trong khoảng 2–100 của cài đặt)
Ghi đè mẫu
Để tùy chỉnh bố cục kết quả xuất ra, hãy sao chép bất kỳ tệp mẫu nào vào theme của bạn:
Ví dụ: your-theme/init-view-count/view-list-grid.php
Giấy phép
Plugin này được cấp phép theo GPLv2 hoặc phiên bản mới hơn.
Bạn có toàn quyền sử dụng, chỉnh sửa, và phân phối lại theo cùng giấy phép.
Ảnh màn hình

![Trình tạo shortcode cho [init_view_list] – tạo danh sách bài viết theo lượt xem với các mẫu tùy chỉnh.](https://ps.w.org/init-view-count/assets/screenshot-2.png?rev=3312929)
![Trình tạo shortcode cho [init_view_ranking] – tạo bảng xếp hạng dạng tab cho các khoảng thời gian xem khác nhau.](https://ps.w.org/init-view-count/assets/screenshot-3.png?rev=3312929)
![Trình tạo shortcode cho [init_view_count] – hiển thị lượt xem của bài viết hiện tại với các tùy chọn định dạng.](https://ps.w.org/init-view-count/assets/screenshot-4.png?rev=3312929)


Khối
Plugin này cung cấp 3 khối.
- Popular Posts List Display a list of the most viewed posts, with optional category/tag filtering.
- View Count Display the tracked view count for the current (or a specific) post.
- View Ranking (Tabbed) Display a tabbed ranking widget (All Time, Today, This Week, …) of the most viewed posts.
Cài đặt
- Tải plugin lên
/wp-content/plugins/init-view-count/ - Kích hoạt qua menu Plugin
- Dùng
[init_view_count]hoặc[init_view_list]trong nội dung của bạn - Tùy chỉnh cài đặt trong Settings Init View Count
Hỏi đáp
-
Tôi có thể tùy chỉnh bố cục của danh sách không?
-
Có. Dùng thuộc tính
templatetrong[init_view_list](ví dụtemplate="grid"), và ghi đè tệp tương ứng trong theme của bạn giống như các mẫu của WooCommerce. -
Plugin có hoạt động với loại bài viết tùy chỉnh không?
-
Có. Chỉ cần đặt
post_type="your_custom_type"trong shortcode hoặc truy vấn REST. -
Plugin tránh đếm trùng lượt xem như thế nào?
-
Init View Count sử dụng cả trì hoãn thời gian và phát hiện cuộn trang qua JavaScript, và lưu ID các bài viết đã xem trong sessionStorage hoặc localStorage (tùy bạn chọn).
-
Lượt xem có được cập nhật ngay lập tức không?
-
Có, theo mặc định. Khi các điều kiện cuộn trang + thời gian chờ (scroll+delay) được đáp ứng, số lượt xem sẽ được gửi qua REST API và lưu bằng một câu lệnh cập nhật cơ sở dữ liệu nguyên tử (atomic update) duy nhất. Nếu bạn bật Reduce view count cache refreshes (Giảm tần suất làm mới bộ nhớ tạm lượt xem), các lượt xem vẫn được ghi vào cơ sở dữ liệu ngay lập tức, nhưng các con số hiển thị trên trang web có thể bị trễ tối đa bằng khoảng thời gian đã cấu hình (xem bên dưới).
-
Meta key nào được dùng để lưu lượt xem?
-
Theo mặc định:
–_init_view_count(tổng)
–_init_view_day_count
–_init_view_week_count
–_init_view_month_count
Các khóa này có thể được thay đổi qua filterinit_plugin_suite_view_count_meta_key.
Điểm Trending được tính riêng và lưu trong transient. -
Tôi có thể tự hiển thị số lượt xem trong mẫu (template) của mình không?
-
Có. Dùng
get_post_meta($post_id, '_init_view_count', true)hoặc các khóa tương tự. Hoặc dùng shortcode[init_view_count]trong nội dung bài viết. -
Tôi có thể tắt CSS có sẵn không?
-
Có. Có một tùy chọn trong cài đặt plugin để tắt stylesheet mặc định. Bạn có thể tự tạo kiểu dáng cho kết quả xuất ra theo ý muốn.
-
Plugin có tương thích với các plugin cache không?
-
Có. Vì plugin dùng JavaScript + REST để đếm, nên việc lưu đệm trang không gây ảnh hưởng. Tuy nhiên, các phản hồi REST (
/top) được lưu đệm bằng transient. -
Tôi có thể dùng plugin này trong Block Editor / Gutenberg không?
-
Có — kể từ phiên bản 2.0.0 đã có 3 block gốc (tìm kiếm “View Count”, “Popular Posts List”, “View Ranking” trong trình chèn block, thuộc danh mục “Init View Count”), mỗi block đều có bảng cài đặt riêng và xem trước trực tiếp. Bạn vẫn có thể sử dụng block Shortcode cổ điển với
[init_view_count]/[init_view_list]/[init_view_ranking]nếu muốn. -
Hỗ trợ Abilities API là gì và tôi có cần dùng nó không?
-
Kể từ phiên bản 2.0.0, trên WordPress 6.9+ plugin đăng ký hai Ability chỉ đọc (
init-view-count/get-post-viewsvàinit-view-count/get-top-posts) thông qua Abilities API của WordPress lõi, giúp các AI agent và công cụ tự động có thể phát hiện cũng như truy vấn dữ liệu lượt xem theo cách chuẩn hóa. Tính năng này hoàn toàn tùy chọn và không ảnh hưởng đến các trang web không có Abilities API (WordPress dưới 6.9) hay cách thức hoạt động khác của plugin — không có ability xem/tăng/đặt lại nào bị công khai. -
Plugin có theo dõi bot không?
-
Không. Vì việc đếm chỉ diễn ra sau khi cuộn và trì hoãn qua JavaScript, nên các bot như Googlebot tự nhiên bị loại trừ.
-
Tôi có thể sắp xếp bài viết theo lượt xem trong WP_Query không?
-
Có. Dùng
'meta_key' => '_init_view_count'và'orderby' => 'meta_value_num'trong các tham sốWP_Querycủa bạn. -
Tôi có thể giảm số lượng yêu cầu xem gửi đến máy chủ không?
-
Có. Bạn có thể bật theo dõi lượt xem theo lô trong cài đặt plugin. Thay vì gửi một yêu cầu cho mỗi lượt xem, các lượt xem sẽ được lưu trong trình duyệt và gửi theo nhóm khi đạt đến ngưỡng.
-
Tôi có nên bật “Reduce view count cache refreshes” (Giảm tần suất làm mới bộ nhớ tạm lượt xem) không?
-
Chỉ khi trang web của bạn sử dụng bộ nhớ tạm đối tượng bền vững (Redis, Memcached, v.v.) và có lượng truy cập lớn. Theo mặc định, mỗi lượt xem được đếm sẽ xóa bộ nhớ tạm dữ liệu mô tả (metadata) của bài viết đó, khiến bài viết phổ biến phải tải lại toàn bộ dữ liệu mô tả từ cơ sở dữ liệu liên tục. Khi bật tùy chọn này, bộ nhớ tạm của mỗi bài viết được làm mới tối đa một lần trong mỗi khoảng thời gian (mặc định là 60 giây, cho phép từ 10–600). Mọi lượt xem vẫn được ghi vào cơ sở dữ liệu ngay lập tức và không có gì bị mất — chỉ các con số hiển thị (shortcode, block, xếp hạng, Trending, con số hiển thị sau khi đếm) có thể bị chậm hơn một chút. Một bài viết không còn nhận thêm lượt xem có thể tiếp tục hiển thị con số thấp hơn một chút cho đến khi có lượt xem tiếp theo, được cập nhật, hoặc khi chạy đặt lại hàng ngày (khi bật lượt xem theo ngày). Nếu không có bộ nhớ tạm đối tượng bền vững, tùy chọn này không có hiệu lực và trang cài đặt sẽ thông báo cho bạn điều đó.
-
Tôi có nên bật “Sample Traffic Shape writes” (Lấy mẫu ghi mô hình lưu lượng) không?
-
Chỉ trên các trang web lượng truy cập cao có bật tính năng Trending (Xu hướng). Bộ học mô hình lưu lượng (Traffic Shape Learner – giúp huấn luyện cho Trending hiểu nhịp độ theo giờ và ngày trong tuần của trang web) sẽ cập nhật một tùy chọn cơ sở dữ liệu trên mỗi yêu cầu lượt xem. Khi bật lấy mẫu (sampling), nó chỉ ghi lại 1 trong mỗi N yêu cầu (mặc định là 10, cho phép từ 2–100) và tính mỗi mẫu N lần, do đó giảm số lần ghi khoảng N lần trong khi các con số kỳ vọng vẫn giữ nguyên. Trên các trang web lượng truy cập thấp, mô hình học được sẽ bị nhiễu hơn, vì vậy hãy tắt nó ở những trang đó. Lượt xem bài viết không bao giờ bị lấy mẫu.
-
Tính năng “Strict IP check” (Kiểm tra IP nghiêm ngặt) có ảnh hưởng đến hiệu năng không?
-
Một chút. Tính năng này đọc một transient trên mỗi yêu cầu lượt xem và ghi lại mỗi khi một lượt xem được đếm. Với bộ nhớ tạm đối tượng bền vững (Redis, Memcached), việc này diễn ra hoàn toàn trong bộ nhớ. Nếu không có, các transient sẽ lưu trong bảng
wp_options, do đó mỗi lượt xem được đếm sẽ phát sinh thêm tối đa hai lần ghi vào cơ sở dữ liệu. Trên các trang web có lượng truy cập cao mà không dùng bộ nhớ tạm đối tượng bền vững, bạn chỉ nên bật tính năng này khi thực sự cần thiết. -
Tôi có nên bật “Yêu cầu xác thực nonce REST” không?
-
Đây là tùy chọn và tắt theo mặc định. Khi bật, endpoint
/countsẽ từ chối các yêu cầu không mang theo nonce REST WordPress hợp lệ, giúp chặn các yêu cầu POST giả gửi trực tiếp đến endpoint. Tuy nhiên, nonce của WordPress hết hạn sau khoảng 12-24 giờ. Nếu site của bạn dùng cache toàn trang với TTL dài, các trang được lưu đệm sẽ tiếp tục phục vụ nonce cũ và việc đếm lượt xem sẽ âm thầm ngừng hoạt động trên các trang đó cho đến khi bộ nhớ đệm được làm mới. Hãy tắt tùy chọn này trên các site dùng cache trang tồn tại lâu dài, hoặc đảm bảo bộ nhớ đệm được xóa/làm mới thường xuyên. Endpoint/topkhông bị ảnh hưởng trong mọi trường hợp, vì nó chỉ đọc và công khai theo thiết kế.
Đánh giá
Người đóng góp & Lập trình viên
“Init View Count – AI-Powered, Trending, REST API” là mã nguồn mở. Những người sau đã đóng góp vào plugin này.
Những người đóng góp“Init View Count – AI-Powered, Trending, REST API” đã được dịch qua 1 ngôn ngữ. Cảm ơn những người tham gia dịch vì đóng góp của họ.
Dịch “Init View Count – AI-Powered, Trending, REST API” sang ngôn ngữ của bạn.
Muốn tham gia phát triển?
Duyệt code, check out SVN repository, hoặc theo dõi nhật ký phát triển qua RSS.
Nhật ký thay đổi
2.0.3 – Ngày 4 tháng 10 năm 2026
- Mới: tùy chọn Reduce view count cache refreshes trong Cài đặt Init View Count (mặc định tắt), với khoảng thời gian làm mới có thể cấu hình (10–600 giây, mặc định 60). Cho đến nay, mỗi lượt xem được đếm đều xóa toàn bộ bộ nhớ tạm meta của bài viết đó (
wp_cache_delete( $post_id, 'post_meta' )) — không chỉ các bộ đếm lượt xem mà là mọi giá trị meta của bài viết. Do đó trên các trang web có bộ nhớ tạm đối tượng bền vững, một bài viết phổ biến sẽ bị xóa bộ nhớ tạm hàng chục lần mỗi phút, và mỗi lần hiển thị trang ngay sau đó phải tải lại toàn bộ dữ liệu meta của bài viết từ cơ sở dữ liệu. Khi bật tùy chọn này, bộ nhớ tạm meta của mỗi bài viết được làm mới tối đa một lần trong mỗi khoảng thời gian (khoóa theo từng bài viết quawp_cache_add(), nguyên tử trên Redis/Memcached). Các lượt xem vẫn được ghi vào cơ sở dữ liệu ngay lập tức bằng câu lệnhUPDATEnguyên tử tương tự, vì vậy không có lượt xem nào bị mất hoặc đếm trùng; chỉ có các con số hiển thị (shortcode, block, xếp hạng, Trending và con số trả về sau khi đếm) là có thể bị trễ tối đa bằng khoảng thời gian đó. Một bài viết ngừng nhận lượt xem sẽ cập nhật kịp thời ở lượt xem tiếp theo, khi nó được cập nhật, hoặc khi đặt lại hàng ngày (khi bật lượt xem theo ngày). Tùy chọn này chỉ có hiệu lực khi bộ nhớ tạm đối tượng bền vững đang hoạt động — trên các trang web không có, dữ liệu meta lưu tạm chỉ tồn tại cho một yêu cầu duy nhất, hành vi vẫn giữ nguyên như trước và trang cài đặt sẽ hiển thị thông báo giải thích điều này - Mới: bộ lọc
init_plugin_suite_view_count_meta_flush_intervalđể điều chỉnh khoảng thời gian làm mới cho từng trang web (trả về0để làm mới sau mỗi lượt xem) - Mới: tùy chọn Sample Traffic Shape writes trong Cài đặt Init View Count (mặc định tắt), với tỷ lệ lấy mẫu N có thể cấu hình (2–100, mặc định 10). Traffic Shape Learner được dùng bởi Trending từng thực hiện một lần
get_option()+update_option()trên mỗi yêu cầu lượt xem — thêm một lần ghi vào cơ sở dữ liệu cho mỗi lượt xem trên mọi trang web. Khi bật lấy mẫu, chỉ 1 trong N yêu cầu được ghi lại và mỗi mẫu tính N lần, do đó số lần ghi giảm khoảng N lần trong khi các nhóm theo giờ và tổng số hàng ngày dự kiến vẫn giữ nguyên (ngưỡng tối thiểu hàng ngày và EMA theo giờ/ngày trong tuần không cần thay đổi). Nó cũng giảm tình trạng các yêu cầu đồng thời ghi đè lên bản cập nhật tùy chọn của nhau. Trong thử nghiệm mô phỏng 200.000 yêu cầu ở N = 10, số lần ghi giảm từ 200.000 xuống ~20.000 và tổng số ghi nhận được nằm trong khoảng chênh lệch 0,4% so với thực tế. Trên các trang web lượng truy cập thấp, mô hình học được sẽ nhiễu hơn, điều này được giải thích ở trang cài đặt. Lượt xem bài viết không bao giờ bị lấy mẫu. Có thể lọc thông qua bộ lọc mớiinit_plugin_suite_view_count_shape_sample_rate(trả về1để ghi lại mọi yêu cầu) - Mới: bổ sung các hàm trợ giúp
init_plugin_suite_view_count_get_meta_flush_interval()vàinit_plugin_suite_view_count_maybe_flush_meta_cache()trongincludes/utils.php, vàinit_plugin_suite_view_count_get_shape_sample_rate()trongincludes/traffic-shape.php. Hàminit_plugin_suite_view_count_flush_meta_cache()không đổi và vẫn xóa bộ nhớ tạm vô điều kiện; việc đặt lại hàng ngày tiếp tục sử dụng hàm này, vì vậy quá trình chuyển sang ngày mới luôn làm mới bộ nhớ tạm của các bài viết bị ảnh hưởng - Cải tiến: Enable strict IP check? hiện giải thích chi phí hiệu năng trong Cài đặt: tính năng này đọc một transient trên mỗi yêu cầu lượt xem và ghi lại trên mỗi lượt xem được đếm, nếu không có bộ nhớ tạm đối tượng bền vững đồng nghĩa với việc thêm tối đa hai lần ghi vào
wp_optionscho mỗi lượt xem được đếm - Cải tiến: khi gỡ cài đặt cũng sẽ xóa bốn tùy chọn mới
- Tài liệu: mục FAQ “Is the view count updated immediately?” (Số lượt xem có được cập nhật ngay lập tức không?) không còn đề cập đến
update_post_meta()(số lượt xem đã được lưu bằng một câu lệnh cập nhật SQL nguyên tử duy nhất từ 2.0.2); đã thêm các mục FAQ cho hai tùy chọn mới và chi phí hiệu năng của kiểm tra IP nghiêm ngặt; bổ sung tài liệu hướng dẫn cho hai bộ lọc mới - Tài liệu: sửa thông tin lỗi thời hoặc không chính xác trong
readme.txt— các mục FAQ về Block Editor và Abilities API ghi “kể từ phiên bản 1.23” (cả hai đều phát hành từ 2.0.0);[init_view_count]từng được mô tả chỉ hoạt động bên trong vòng lặp bài viết và thiếu thuộc tínhid;[init_view_list]hiển thịnumbermặc định là 5 (thực tế là 10);[init_view_ranking]bị thiếu thuộc tínhpost_typevà các tabyesterday/last_week/last_month;GET /topliệt kêpostlà loại bài viết mặc định (thực tế làpostvàpage), thiếu các khoảngyesterday/last_week/last_month/trendingvà giới hạn tối đa 100 mục; bộ lọcinit_plugin_suite_view_count_trending_component_weightschỉ liệt kê 4 trong số 9 trọng số và bị hiển thị trên một dòng duy nhất - Tài liệu: xóa các mục nhật ký thay đổi cho phiên bản 1.22 trở về trước khỏi
readme.txt; lịch sử đầy đủ có sẵn tại liên kết bên dưới - i18n: đã tạo lại
init-view-count.potbằng WP-CLI; các chuỗi mới đã được dịch tronginit-view-count-vi.po/.mo - Chất lượng mã nguồn: tất cả tệp PHP đều đạt Tiêu chuẩn Mã nguồn WordPress (
WordPress-Extra) mà không có lỗi hay cảnh báo nào
2.0.2 – 26 tháng 9, 2026
- Bảo mật: action
init_plugin_suite_view_count_shape_resetcủa admin-post (xóa dữ liệu Traffic Shape đã học) trước đây không có kiểm tra quyền hạn và không có nonce, nên bất kỳ người dùng đã đăng nhập nào (kể cả Subscriber), hoặc một liên kết CSRF, đều có thể xóa dữ liệu đã học. Giờ nó yêu cầu quyềnmanage_optionsvà một nonce hợp lệ. Một nút Đặt lại dữ liệu mẫu hình lưu lượng (kèm nonce) đã được thêm vào Settings Init View Count. Các liên kết tùy chỉnh giờ phải được tạo bằngwp_nonce_url( admin_url( 'admin-post.php?action=init_plugin_suite_view_count_shape_reset' ), 'init_plugin_suite_view_count_shape_reset' ) - Bảo mật:
GET /topgiờ chỉ chấp nhận các loại bài viết tồn tại và có thể xem công khai (is_post_type_viewable()), nên endpoint công khai này không còn có thể để lộ tiêu đề/đoạn trích của các loại bài viết nội bộ nhưwp_block. Filterinit_plugin_suite_view_count_top_post_typesvẫn chạy sau đó, nên lập trình viên có thể chủ động thêm các loại khác.numberbị giới hạn tối đa 100 (có thể tùy chỉnh qua filter mớiinit_plugin_suite_view_count_api_top_max_number). Một mảng được truyền làmtermskhông còn gây lỗi PHP nghiêm trọng nữa - Bảo mật: script frontend của
[init_view_ranking]giờ dựng các mục bằng DOM API (textContent) thay vì chèn chuỗi từ API vàoinnerHTML, và chỉ cho phép liên kết/hình ảnhhttp(s) - Đã sửa lỗi: trên các site có độ lệch UTC âm (châu Mỹ, v.v.), việc đặt lại hàng ngày trước đây tính ngày trong tuần/tháng từ một timestamp bị áp dụng độ lệch múi giờ hai lần, khiến lúc 00:01 hệ thống vẫn tưởng là ngày hôm trước — bộ đếm tuần bị đặt lại vào thứ Ba thay vì thứ Hai và bộ đếm tháng vào ngày 2 thay vì ngày 1. Giờ mọi phép tính ngày tháng đều dùng timestamp Unix thực với
wp_date(). Giá trị$nowtruyền cho các hook/filter hiện có không thay đổi - Đã sửa lỗi: sự kiện đặt lại hàng ngày giờ tự căn chỉnh lại về 00:01 giờ site sau các thay đổi giờ mùa hè (chu kỳ
dailycủa WP-Cron cố định 24 giờ và trước đây có thể trôi dần đến 23:01 hoặc 01:01). Các site không dùng DST hoàn toàn không bị ảnh hưởng - Đã sửa lỗi (Trending): độ tuổi bài viết trước đây được tính bằng “timestamp giờ địa phương trừ timestamp GMT”, cộng thêm độ lệch UTC của site vào độ tuổi mỗi bài viết (ví dụ +7 giờ trên các site GMT+7), làm sai lệch mức tăng độ mới và độ suy giảm theo thời gian. Giờ độ tuổi được tính từ timestamp Unix thực. Các giá trị
trending_last_calculationcũ được lưu theo giờ địa phương sẽ được xử lý an toàn khi nâng cấp - Đã sửa lỗi (Trending): chủ đề nóng trước đây truyền giá trị
term_taxonomy_idchoget_term()như thể chúng là term ID. Hai giá trị này không phải lúc nào cũng bằng nhau (term bị tách/gộp, site đã di chuyển dữ liệu), nên mức tăng “nóng” có thể bị gán nhầm cho chuyên mục/thẻ tag sai. Giờ truy vấn trả về trực tiếp term ID và danh mục phân loại - Đã sửa lỗi (Trending): thành phần động lượng EWMA trước đây được lưu trong object cache không bền vững, nên trên các site không có Redis/Memcached nó không bao giờ được giữ lại giữa các lượt chạy và về cơ bản không có tác dụng gì. Giờ nó hoạt động trên mọi site
- Đã sửa lỗi:
[init_view_count time="true"]trước đây hiển thị “Đăng 7 giờ trước” cho một bài viết vừa xuất bản trên các site GMT+7 (timestamp GMT bị so sánh với timestamp giờ địa phương) - Đã sửa lỗi: một yêu cầu
POST /countduy nhất chứa cùng một ID bài viết nhiều lần (ví dụ[5,5,5]) trước đây làm tăng lượt xem của bài viết đó nhiều lần. Giờ các ID trùng lặp trong một yêu cầu sẽ bị bỏ qua - Đã sửa lỗi:
[init_view_ranking]trước đây chỉ khởi tạo khối xếp hạng đầu tiên trên một trang; các bảng xếp hạng bổ sung mãi mãi ở trạng thái khung tải. Giờ mọi khối xếp hạng đều được khởi tạo, và mỗi khối giữpost_typeriêng của mình - Đã sửa lỗi: script xếp hạng trước đây chuyển về dùng
/wp-json/khi script theo dõi không có trên trang (trang lưu trữ, widget Dashboard), gây lỗi trên các site cài trong thư mục con hoặc không dùng permalink đẹp. Giờ URL REST chính xác luôn được cung cấp - Đã sửa lỗi: script theo dõi lượt xem trước đây ngừng hoạt động hoàn toàn khi trình duyệt chặn
localStorage/sessionStorage(chế độ ẩn danh của Safari, cài đặt quyền riêng tư nghiêm ngặt). Việc truy cập bộ nhớ giờ được bảo vệ bằng cơ chế dự phòng ngay trong trang - Đã sửa lỗi: giá trị
classNamecủa block có nhiều lớp (ví dụfoo bar) trước đây bị gộp thànhfoobar;[init_view_count class="..."]giờ cũng chấp nhận nhiều lớp - Đã sửa lỗi: thuộc tính block chứa dấu ngoặc vuông hoặc dấu ngoặc kép (ví dụ tiêu đề danh sách
Top [2026]) trước đây làm hỏng shortcode được tạo ra. Giờ các block gọi trực tiếp callback của shortcode với một mảng thuộc tính (các filter lõipre_do_shortcode_tag/do_shortcode_tagvẫn được áp dụng) - Đã sửa lỗi: tự động chèn giờ chỉ thêm bộ đếm lượt xem vào nội dung của bài viết đang thực sự được xem, không thêm vào nội dung của các bài viết khác hiển thị trên cùng trang, và không thêm vào các đoạn trích được tạo từ nội dung (ví dụ mô tả meta SEO)
- Đã sửa lỗi: bộ theo dõi phía frontend giờ dùng ID bài viết được truy vấn thay vì
get_the_ID(), nên một theme/plugin chạy truy vấn phụ trướcwp_headmà không đặt lại sẽ không còn làm lượt xem bị tính nhầm cho bài viết khác - Đã sửa lỗi: trình tạo Shortcode Builder trước đây đọc sai tên đối tượng đã bản địa hóa, khiến “Copy”, “Close” và “Shortcode Preview” chưa bao giờ được dịch. Chức năng Sao chép giờ cũng hoạt động trên các màn hình quản trị không dùng HTTPS
- Đã sửa lỗi:
init_plugin_suite_view_count_format_thousands()trước đây có thể xuất ra1000.0 K(cho 999.950) và2.0 K; giờ nó xuất ra1 Mvà2 K - Đã sửa lỗi: bật Tắt Trending giờ cũng ẩn dữ liệu trending đã tính toán trước đó khỏi
GET /top, đúng như mô tả của cài đặt này - Hiệu năng:
POST /countgiờ tăng tất cả bộ đếm của một bài viết (tổng/ngày/tuần/tháng) chỉ bằng một câu lệnhUPDATEnguyên tử duy nhất thay vì một truy vấn cho mỗi bộ đếm — 2 truy vấn cho mỗi lượt xem thay vì 5 trong trường hợp thông thường. Các trường hợp chèn lượt xem đầu tiên và bộ nhớ đệm cũ vẫn được xử lý một cách nguyên tử - Hiệu năng: quá trình chuyển đổi hàng ngày giờ chỉ ghi các dòng thực sự có thay đổi. Các bài viết không có lượt xem trong kỳ mà giá trị “kỳ trước” đã là 0 (phần lớn trên các site lớn) không còn bị xóa và chèn lại mỗi ngày; các dòng hiện có được cập nhật tại chỗ. Trong thử nghiệm trên 42 bài viết, một ngày thông thường giảm từ 126 lượt chèn + 129 lượt xóa xuống còn 3 lượt cập nhật + 3 lượt xóa. Kết quả cuối cùng trong cơ sở dữ liệu giống hệt phiên bản trước (đã kiểm chứng đối chiếu với logic cũ bằng dữ liệu ngẫu nhiên)
- Hiệu năng: việc tính toán Trending mỗi giờ giờ nạp trước bộ nhớ đệm bài viết, term, và meta ngay từ đầu, đọc số bình luận từ đối tượng bài viết, lưu trạng thái EWMA/giới hạn điểm/chuỗi liên tiếp trong một tùy chọn không tự tải duy nhất thay vì hàng trăm transient cho từng bài viết, và bước xếp hạng lại đa dạng MMR giờ có độ phức tạp O(limit × n) thay vì O(limit² × n) với kết quả giống hệt. Trong thử nghiệm, một lượt chạy giảm từ ~590 truy vấn xuống còn ~30
- Hiệu năng:
GET /topnạp trước bộ nhớ đệm ảnh đại diện chỉ trong một truy vấn; khóa bộ nhớ đệm của nó bỏ qua thứ tự tham số và các tham số chống lưu đệm (_,no_cache);[init_view_list]cũng nạp trước ảnh đại diện - Hiệu năng: script frontend được tải theo chiến lược
defer;fetchdùngkeepaliveđể lượt xem vẫn được gửi ngay cả khi người truy cập rời trang đúng lúc đủ điều kiện tính - Cải thiện: chế độ theo lô giữ lại các ID trong hàng đợi vượt quá kích thước lô cho lần gửi tiếp theo thay vì bỏ chúng đi; số lượt xem được cập nhật ở mọi nơi bộ đếm của bài viết xuất hiện trên trang
- Cải thiện: block View Count sử dụng ngữ cảnh block
postId(Query Loop, mẫu FSE) khi Post ID bằng 0 - Cải thiện: filter mới
init_plugin_suite_view_count_ip_headersđể giới hạn những header nào được tin tưởng cho kiểm tra IP nghiêm ngặt (ví dụ chỉ dùngREMOTE_ADDRtrên các máy chủ không đứng sau proxy/CDN) - Cải thiện: các sự kiện cron được xóa khi tắt plugin; việc gỡ cài đặt giờ cũng xóa cả meta hôm qua/tuần trước/tháng trước, mọi tùy chọn và transient của plugin (kể cả kết quả
/topđã lưu đệm, mà quy trình gỡ cài đặt trước đây không tìm thấy được), và chạy trên mọi site của mạng multisite - i18n: đã tạo lại
init-view-count.potbằng WP-CLI; các chuỗi mới đã được dịch tronginit-view-count-vi.po/.mo - Chất lượng mã nguồn: mọi tệp PHP giờ đều đạt chuẩn WordPress Coding Standards (
WordPress-Extra) không lỗi và không cảnh báo
2.0.1 – 29 tháng 8, 2026
- Đã sửa lỗi: trên một site mà quản trị viên chưa từng mở và lưu Settings Init View Count ít nhất một lần, các bộ đếm lượt xem theo ngày/tuần/tháng vẫn tiếp tục tăng bình thường (đoạn mã đó mặc định là “bật” khi tùy chọn chưa tồn tại) nhưng lại không bao giờ được đặt lại bởi cron hàng ngày (đoạn mã đó không có giá trị mặc định và coi tùy chọn bị thiếu là “tắt”). Đọc trực tiếp
_init_view_day_countsẽ thấy nó tăng mãi mãi thay vì được chuyển vào_init_view_day_yesterday. Giờ mọi lần đọc các tùy chọn bật ngày/tuần/tháng đều nhất quán mặc định là bật, khớp với logic đếm REST và các ô đánh dấu mặc định được chọn sẵn trên trang cài đặt - Đã sửa lỗi: đặt “Độ trì hoãn trước khi đếm” thành
0trước đây không thực sự đếm lượt xem ngay lập tức — nó âm thầm chuyển về giá trị mặc định (15000ms) hoặc, tùy trình duyệt, đôi khi không đếm gì cả. Vấn đề tương tự cũng ảnh hưởng đến “Phần trăm cuộn yêu cầu” khi đặt thành0. Nguyên nhân gốc là mẫuvalue || fallbacktrong script frontend, coi giá trị0hợp lệ là falsy và luôn thay bằng giá trị mặc định. Giờ cả hai tùy chọn đều được kiểm tra khi lưu, được áp dụng lại tại thời điểm xuất ra (nên các site đã lưu sẵn0sẽ có hiệu lực mà không cần lưu lại), và được phân tích đúng cách trong script frontend - Đã sửa lỗi: trên các trang ngắn hơn khung nhìn (không có gì để cuộn), việc kiểm tra phần trăm cuộn trước đây không bao giờ vượt qua được, vì ngưỡng cuộn chỉ được đánh giá bên trong trình xử lý sự kiện
scroll, và không có sự kiệnscrollnào được kích hoạt khi không có gì để cuộn. Giờ script cũng đánh giá điều kiện cuộn một lần ngay sau khi trang ổn định, bên cạnh việc đánh giá khi cuộn - Thay đổi: “Độ trì hoãn trước khi đếm” giờ được giới hạn trong khoảng 100ms–600000ms (10 phút), và “Phần trăm cuộn yêu cầu” trong khoảng 1%–100%. Giá trị
0bị chủ ý không cho phép ở cả hai: độ trì hoãn 0ms có nguy cơ đếm lượt xem trước khi trang thực sự được hiển thị, và yêu cầu cuộn 0% sẽ âm thầm tắt hoàn toàn việc kiểm tra cuộn - Hiệu năng: quá trình đặt lại bằng cron hàng ngày (
init_plugin_suite_view_count_reset_counts— chuyển lượt xem hôm nay/tuần này/tháng này thành hôm qua/tuần trước/tháng trước và đặt lại các bộ đếm, trên mọi loại bài viết đã đăng ký công khai, không cần cấu hình) trước đây lặp quaget_post_meta()+update_post_meta()+delete_post_meta()cho từng bài viết, từng bộ đếm, điều này trên các site nhiều bài viết có thể có nghĩa là hàng chục nghìn truy vấn DB riêng lẻ trong một lượt chạy cron. Giờ nó thực hiện cùng việc chuyển đổi này bằng SQL trực tiếp theo lô (mặc định 500 bài viết mỗi truy vấn, có thể tùy chỉnh quainit_plugin_suite_view_count_reset_batch_size), giảm số truy vấn từ O(số bài viết) xuống O(số lô), sau đó xóa bộ nhớ đệm đối tượng cho các bài viết bị ảnh hưởng trong một lượt duy nhất — dùng phương thức xóa theo lô của object cache khi backend cache đang hoạt động hỗ trợ (WordPress lõi có hỗ trợ, từ phiên bản 6.0), và chuyển về gọi xóa bộ nhớ đệm từng cái một trong các trường hợp khác để tương thích với các plugin object cache bên thứ ba (Redis, Memcached, v.v.) có thể chưa triển khai phương thức đó. Hành vi không thay đổi: mọi bài viết đủ điều kiện vẫn có được giá trị “kỳ trước” (0 nếu không có lượt xem), giữ đúng kết quả trongGET /top?range=yesterday|last_week|last_month; đã kiểm chứng đối chiếu với logic cũ theo từng bài viết qua hơn 1.000 kịch bản ngẫu nhiên trước khi phát hành - Nội bộ: đã tách các hàm hỗ trợ dùng chung (
init_plugin_suite_view_count_atomic_increment(),init_plugin_suite_view_count_flush_meta_cache(), các hàm hỗ trợ phát hiện IP, hàm định dạng số K/M/B, và hàm hỗ trợ giới hạn số nguyên mới) ra khỏirest-api.phpvàshortcodes.phpvào một tệp mớiincludes/utils.php, được tải đầu tiên. Không thay đổi hành vi, chỉ đơn thuần là dọn dẹp tổ chức mã nguồn - Nội bộ: đã thay
extract()trong hàm hỗ trợ dựng mẫu nội bộ bằng cách gán biến rõ ràng để tuân thủ WPCS (WordPress.PHP.DontExtract); hàm này chỉ luôn được gọi với một khóa cố định duy nhất, nên hành vi không thay đổi
2.0.0 – 4 tháng 8, 2026
- Thay đổi phá vỡ tương thích:
Requires at leastgiờ là WordPress 6.9. Việc nâng phiên bản lớn này phản ánh hai tính năng mới quan trọng được thêm vào trong phiên bản này — hỗ trợ Abilities API và hỗ trợ Block Editor gốc (xem bên dưới) - Mới: Hỗ trợ Abilities API (WordPress 6.9+). Đăng ký hai ability chỉ đọc trong danh mục
init-view-countđể các AI agent và công cụ tự động có thể phát hiện và truy vấn dữ liệu lượt xem qua registry chuẩn hóawp_register_ability(), mà không cần biết đến các route REST của plugin:init-view-count/get-post-views— trả về lượt xem đã theo dõi của một bài viết (tổng/ngày/tuần/tháng)init-view-count/get-top-posts— trả về danh sách xếp hạng các bài viết được xem nhiều nhất (dùng chung chính xác logic củaGET /topvà shortcode[init_view_ranking], nên kết quả luôn khớp nhau)- Không có ability nào cho phép ghi/phá hủy được đăng ký, theo chủ ý thiết kế — không có gì có thể tăng hoặc đặt lại lượt xem qua API này
- Mới: Hỗ trợ Block Editor (Gutenberg) với 3 block động tương ứng 1:1 với các shortcode hiện có — View Count, Popular Posts List, và View Ranking (Dạng tab). Mỗi block là một lớp bọc PHP mỏng (
render.php, qua trườngrendertrongblock.json) tạo ra cùng thẻ shortcode và gọido_shortcode(), nên không có logic hiển thị bị lặp lại và kết quả luôn khớp với shortcode. Script trình soạn thảo là JavaScript thuần (không cần bước build, không JSX) dùngServerSideRenderđể xem trước trực tiếp ngay trong trình soạn thảo Đã kiểm tra đến: 7.1
Xem nhật ký thay đổi đầy đủ (tất cả phiên bản): Init View Count – Changelog
