- Đổi footer text
- Dark mode mặc định
- Tắt nút đổi mode
- Đổi icon UIkit
- Chèn quảng cáo nặng (ẩn với VIP)
- Tăng số chương hiển thị ở thẻ truyện (mặc định 2)
- Tự động mở khóa chương “Coin” cho VIP
- Đổi nhãn “Chapter” và ký tự phân tách
- Ẩn phụ đề chương (subtitle) để tiêu đề gọn hơn
- Ghi đè toàn bộ tiêu đề trang (toàn quyền kiểm soát)
- Tùy chỉnh meta description (ngắn gọn, tập trung chuyển đổi)
- Tắt hoàn toàn module SEO cho chương
- Tăng giá unlock tạm (VIP Days)
- Tắt quảng cáo Google AdSense cho VIP (Advanced)
- Chặn Tác giả (Author) xóa chương hoặc bài viết
- Thêm câu hỏi tuỳ chỉnh cho Trợ Lý Ảo
- Kết luận
Đổi footer text
Đoạn snippet này cho phép bạn thay đổi nội dung footer mặc định của Init Manga, ví dụ thêm tên site hoặc lời cảm ơn.
add_filter('init_manga_footer_text', function ($text) {
return '© ' . current_time('Y') . ' My Custom Site · All rights reserved.';
});
Dark mode mặc định
Bạn có thể đặt chế độ màu mặc định thành auto, dark, hoặc light chỉ với một filter nhỏ.
add_filter('init_manga_default_color_mode', function () {
return 'dark'; // auto | dark | light
});
Tắt nút đổi mode
Nếu bạn đã cố định chế độ sáng/tối, có thể tắt hẳn nút chuyển để giao diện gọn gàng hơn.
add_filter('init_manga_disable_theme_mode_toggle', '__return_true');
Đổi icon UIkit
Bạn có thể thay thế các icon mặc định bằng SVG của riêng mình, ví dụ cho Coin, Cash, hay Power Stone.
<script>
document.addEventListener("DOMContentLoaded", () => {
UIkit.icon.add('database', '<svg>...</svg>');
UIkit.icon.add('credit-card', '<svg>...</svg>');
UIkit.icon.add('lifesaver', '<svg>...</svg>');
});
</script>
Chèn quảng cáo nặng (ẩn với VIP)
Đoạn code dưới đây cho phép gắn script quảng cáo nặng, nhưng sẽ tự động bỏ qua nếu người dùng là VIP. Rất hữu ích để bảo vệ trải nghiệm cho người trả phí.
function init_manga_ads_non_vip() {
if ( function_exists('init_plugin_suite_user_engine_is_vip')
&& init_plugin_suite_user_engine_is_vip() ) return;
?>
<div id="im-heavy-ads"></div>
<script>
// Dán script quảng cáo nặng / anti-adblock ở đây
</script>
<?php
}
add_action('wp_footer', 'init_manga_ads_non_vip', 20);
Tăng số chương hiển thị ở thẻ truyện (mặc định 2)
Mặc định init_manga_get_manga_chapters_bulk() dùng đối số 2. Bạn có thể override qua filter dưới đây (ví dụ đổi thành 4). Điều chỉnh con số theo tài nguyên server và nhu cầu thực tế.
add_filter('init_manga_get_manga_chapters_bulk_arg', function ($arg, $manga_ids) {
// Đổi thành 4
return 4;
}, 10, 2);
Tự động mở khóa chương “Coin” cho VIP
Bạn có thể cho thành viên VIP đọc miễn phí các chương khóa bằng Coin. Filter dưới đây chỉ can thiệp với lock type coin, giữ nguyên các loại khóa khác.
add_filter('init_manga_bypass_coin_lock', function ($bypass, $user_id, $chapter, $manga) {
// Chỉ xử lý khi đã đăng nhập
if (! $user_id) return false;
// Chỉ nhắm tới khóa "coin"
$lock_type = $chapter['lock_type'] ?? 'none';
if ($lock_type !== 'coin') return $bypass;
// Có hàm VIP của Init Plugin Suite thì dùng
if (function_exists('init_plugin_suite_user_engine_is_vip')) {
if (init_plugin_suite_user_engine_is_vip($user_id)) {
// VIP → bỏ qua coin lock
return true;
}
}
// Mặc định giữ nguyên quyết định trước đó
return $bypass;
}, 10, 4);
Đổi nhãn “Chapter” và ký tự phân tách
Lưu ý: Các filter bên dưới được áp dụng trực tiếp cho phần SEO của Chapter, bao gồm tiêu đề hiển thị (title) và thẻ meta description, tương thích với cả Core WP lẫn các plugin SEO phổ biến.
Bạn có thể thay “Chapter” thành “Ep.” và đổi ký tự phân tách giữa các phần tiêu đề/site.
// Change "Chapter" to "Ep."
add_filter('init_manga_chapter_label', function ($label, $manga, $chapter) {
return 'Ep.';
}, 10, 3);
// Use a different separator between parts
add_filter('init_manga_title_separator', function ($sep, $manga, $chapter) {
return ' | ';
}, 10, 3);
add_filter('init_manga_site_separator', function ($sep, $manga, $chapter) {
return ' • ';
}, 10, 3);
Kết quả ví dụ:
Manga Title | Ep. 123: Subtitle • Your Site
Ẩn phụ đề chương (subtitle) để tiêu đề gọn hơn
Nếu bạn muốn bỏ phần “: Subtitle” cho tiêu đề chặt chẽ hơn, dùng filter sau:
add_filter('init_manga_include_chapter_title', function ($include, $manga, $chapter) {
return false; // không append ": Subtitle"
}, 10, 3);
Ghi đè toàn bộ tiêu đề trang (toàn quyền kiểm soát)
Trong trường hợp cần kiểm soát tuyệt đối tiêu đề, bạn có thể trả về chuỗi cuối cùng. Giá trị này sẽ được inject vào cả Core WP và các plugin SEO phổ biến.
add_filter('init_manga_full_title', function ($full, $ctx) {
$manga = $ctx['manga'];
$chapter = $ctx['chapter'];
$site = $ctx['site'];
// Ví dụ: "Manga Title — Read Chapter 123 Now | Your Site"
return sprintf(
'%s — Read Chapter %s Now | %s',
get_the_title($manga),
$chapter['number'],
$site
);
}, 10, 2);
Giá trị trả về sẽ đi vào:
- Core WP:
pre_get_document_title,document_title_parts - Rank Math:
rank_math/frontend/title - Yoast:
wpseo_title - SEOPress:
seopress_titles_title - AIOSEO:
aioseo_title
Tóm lại: những gì bạn “force” ở đây sẽ là tiêu đề hiển thị ở mọi nơi.
Tùy chỉnh meta description (ngắn gọn, tập trung chuyển đổi)
Bạn có thể tự định dạng description theo template mong muốn; hệ thống sẽ tự trim ~160 ký tự.
add_filter('init_manga_chapter_meta_desc', function ($desc, $manga, $chapter) {
$manga_name = get_the_title($manga);
$chapter_no = $chapter['number'];
$chapter_name = trim((string) ($chapter['title'] ?? ''));
// Template ví dụ
$base = $chapter_name !== ''
? sprintf('%s – Chapter %s: %s. Read free, fast loading, no fluff.',
$manga_name, $chapter_no, $chapter_name)
: sprintf('%s – Chapter %s. Read free, fast loading, no fluff.',
$manga_name, $chapter_no);
return $base; // hệ thống sẽ auto-trim ~160 ký tự
}, 10, 3);
Tắt hoàn toàn module SEO cho chương
Nếu bạn muốn vô hiệu hóa hoàn toàn tính năng SEO của chương (ví dụ không tạo meta, schema, hay thẻ canonical riêng cho từng chapter), bạn có thể dùng filter sau:
add_filter('init_manga_disable_chapter_seo', function ($disable) {
return true; // tắt module SEO hoàn toàn cho chapter
}, 10);
Ghi chú: Plugin Rank Math SEO có hỗ trợ tối ưu SEO cho từng chương truyện (chapter). Trong trường hợp bạn ưu tiên dùng Rank Math, nên áp dụng filter này để tắt module SEO mặc định của theme, tránh trùng thẻ meta hoặc canonical.
Tăng giá unlock tạm (VIP Days)
Mặc định chi phí unlock tạm một chương VIP Days được tính bằng 100 Coin/giờ. Bạn có thể thay đổi con số này qua filter bên dưới, ví dụ tăng lên thành 250 Coin/giờ.
add_filter('init_manga_vipdays_coin_rate_per_hour', function ($rate) {
// Đổi mặc định từ 100 → 250 Coin/giờ
return 250;
});
Tắt quảng cáo Google AdSense cho VIP (Advanced)
Mặc định Init Manga đã có filter để chặn script tổng của Google Site Kit AdSense cho người dùng VIP. Tuy nhiên, nếu bạn sử dụng tính năng <strong>gắn quảng cáo nâng cao</strong> (Advanced Ads), các đơn vị quảng cáo riêng lẻ vẫn có thể được in ra. Code snippet bên dưới sẽ chặn hoàn toàn mọi quảng cáo AdSense cho user VIP bằng 2 lớp bảo vệ: chặn từ nguồn (filters) và quét sạch output (buffer).
// Buffer toàn bộ output để remove ads
add_action('template_redirect', function() {
if ( ! function_exists('init_plugin_suite_user_engine_is_vip') ) {
return;
}
if ( init_plugin_suite_user_engine_is_vip() ) {
ob_start(function($buffer) {
// Remove script adsbygoogle.js
$buffer = preg_replace('/<script[^>]*pagead2\.googlesyndication\.com[^>]*>.*?<\/script>/is', '', $buffer);
// Remove ins adsbygoogle
$buffer = preg_replace('/<ins[^>]*adsbygoogle[^>]*>.*?<\/ins>/is', '', $buffer);
// Remove script push adsbygoogle
$buffer = preg_replace('/<script[^>]*>\s*\(adsbygoogle\s*=\s*window\.adsbygoogle.*?<\/script>/is', '', $buffer);
return $buffer;
});
}
}, 1);
Chặn Tác giả (Author) xóa chương hoặc bài viết
Nếu bạn muốn hạn chế quyền xóa đối với user có vai trò Author (ví dụ để tránh trường hợp tác giả lỡ tay xóa chương hoặc truyện đã đăng), bạn có thể áp dụng đoạn code sau:
// Không cho Author xóa chương
add_filter('init_manga_can_delete_chapter', function($can_delete, $chapter, $user_id) {
// Nếu user có vai trò Author → không cho xoá
if (user_can($user_id, 'author')) {
return false;
}
return $can_delete;
}, 10, 3);
// Xóa toàn bộ quyền xóa bài viết của Author
add_filter('user_has_cap', function($caps, $cap, $args, $user) {
// Nếu user là Author → remove toàn bộ quyền delete
if (isset($user->roles) && in_array('author', $user->roles, true)) {
unset($caps['delete_posts']); // Không xoá draft
unset($caps['delete_published_posts']); // Không xoá bài đã đăng
unset($caps['delete_private_posts']); // Không xoá bài private
}
return $caps;
}, 10, 4);
Thêm câu hỏi tuỳ chỉnh cho Trợ Lý Ảo
Nếu bạn muốn mở rộng Trợ Lý Ảo bằng một câu hỏi đơn giản (không gọi hàm, không query CSDL), bạn có thể dùng đoạn code sau.
Ví dụ: thêm câu hỏi “Trang web này được tạo bởi ai?” và trả lời ngay bằng text.
// Đăng ký câu hỏi mới
add_filter('init_manga_assistant_questions', function ($items) {
$items[] = [
'key' => 'site_author',
'desc' => __('Trang web này được tạo bởi ai?', 'init-manga'),
'handler' => 'init_manga_handle_site_author',
'type' => 'text', // trả về dạng text
'category' => 'about',
];
return $items;
});
// Handler: trả lời trực tiếp bằng văn bản
function init_manga_handle_site_author($payload) {
return __('Website này được xây dựng bởi Init HTML.', 'init-manga');
}
Kết luận
Bổ sung trên giúp bạn: điều chỉnh kích thước xử lý chương theo lô để tối ưu hiệu năng, và bật đặc quyền đọc free cho VIP với chương khóa bằng Coin, v.v. Kết hợp cùng các snippet về giao diện và quảng cáo, bạn đã có bộ công cụ “vừa gọn vừa mạnh”. Hãy chọn những snippet thật sự cần và test kỹ nếu có thể trước khi áp dụng production để đảm bảo hiệu suất và trải nghiệm người dùng.
Bình luận