Mở rộng Init View Count bằng Filters & Hooks – Hướng dẫn dành cho Developer

Plugin Init View Count được xây dựng với định hướng mở rộng mạnh mẽ. Là một lập trình viên, bạn có thể dễ dàng điều chỉnh hành vi của plugin thông qua các filter và action có sẵn. Bài viết này sẽ liệt kê và hướng dẫn cách sử dụng toàn bộ hook mà plugin hỗ trợ.

Mở rộng Init View Count bằng Filters & Hooks – Hướng dẫn dành cho Developer

Các Filter liên quan đến REST API

1. init_plugin_suite_view_count_should_count

Quyết định xem lượt xem hiện tại có nên được đếm không. Dùng để loại bỏ các trường hợp đặc biệt như bot, người dùng đã đăng nhập, v.v.

add_filter('init_plugin_suite_view_count_should_count', function ($should_count, $post_id, $request) {
    if (is_user_logged_in()) return false; // Không đếm với user đã đăng nhập
    return $should_count;
}, 10, 3);

2. init_plugin_suite_view_count_meta_key

Thay thế meta key mặc định _init_view_count dùng để lưu tổng lượt xem.

add_filter('init_plugin_suite_view_count_meta_key', function ($key, $post_id) {
    return '_custom_total_views';
}, 10, 2);

3. init_plugin_suite_view_count_after_counted

Thực hiện hành động sau khi lượt xem đã được đếm. Ví dụ: ghi log, gửi webhook, v.v.

add_action('init_plugin_suite_view_count_after_counted', function ($post_id, $updated, $request) {
    error_log("Bài viết {$post_id} đã được xem. Tổng lượt: " . $updated['total']);
}, 10, 3);

4. init_plugin_suite_view_count_api_top_args

Tuỳ chỉnh tham số WP_Query trong API /wp-json/init/v1/top.

add_filter('init_plugin_suite_view_count_api_top_args', function ($args, $request) {
    $args['meta_query'][] = [
        'key' => '_is_featured',
        'value' => '1',
        'compare' => '='
    ];
    return $args;
}, 10, 2);

5. init_plugin_suite_view_count_api_top_item

Tuỳ chỉnh dữ liệu trả về cho từng bài viết trong API /top.

add_filter('init_plugin_suite_view_count_api_top_item', function ($item, $post, $request) {
    $item['author'] = get_the_author_meta('display_name', $post->post_author);
    return $item;
}, 10, 3);

6. init_plugin_suite_view_count_api_top_cache_time

Thay đổi thời gian cache (tính bằng giây) cho kết quả API /top. Mặc định là 5 phút.

add_filter('init_plugin_suite_view_count_api_top_cache_time', function ($seconds, $request) {
    return 600; // Cache trong 10 phút
}, 10, 2);

Các Filter hỗ trợ Shortcode

1. init_plugin_suite_view_count_meta_key

Thay đổi meta key mà shortcode [init_view_list] dùng để lấy lượt xem.

add_filter('init_plugin_suite_view_count_meta_key', function ($key, $atts) {
    if ($atts['range'] === 'day') {
        return '_init_view_day_count';
    }
    return $key;
}, 10, 2);

2. init_plugin_suite_view_count_query_args

Tuỳ chỉnh tham số truy vấn WP_Query trong shortcode [init_view_list].

add_filter('init_plugin_suite_view_count_query_args', function ($args, $atts) {
    $args['post__not_in'] = [42]; // Loại trừ bài viết có ID 42
    return $args;
}, 10, 2);

3. init_plugin_suite_view_count_empty_output

Thay đổi nội dung HTML khi không có bài viết nào trong danh sách.

add_filter('init_plugin_suite_view_count_empty_output', function ($output, $atts) {
    return '<p class="no-posts">Chưa có bài nào được xem nhiều.</p>';
}, 10, 2);

4. init_plugin_suite_view_count_view_list_atts

Tuỳ chỉnh toàn bộ thuộc tính sau khi shortcode merge xong, trước khi render.

add_filter('init_plugin_suite_view_count_view_list_atts', function ($atts) {
    if (is_page('trang-chu')) {
        $atts['number'] = 10;
    }
    return $atts;
});

Lưu ý khi mở rộng

  • Luôn khai báo các filter trong plugin con (mu-plugin) hoặc trong functions.php của theme.
  • Kiểm tra kỹ biến đầu vào như $post_id, $request để tránh lỗi không mong muốn.
  • Cẩn trọng khi thay đổi meta_key hoặc query args vì ảnh hưởng trực tiếp tới kết quả.

Bình luận


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