[Hoạt động 100%] – Fix lỗi _load_textdomain_just_in_time

_load_textdomain_just_in_time được thêm vào từ phiên bản WordPress 6.7.0 . Mục đích của chức năng này là để kiểm tra các gói ngôn ngữ được tải một cách hợp lý và chính xác với cấu trúc của WordPress hay không.

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the text-domain domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.)

Bạn đang gặp phải thông báo lỗi “_load_textdomain_just_in_time” trong WordPress? Đừng lo lắng, bài viết này sẽ giúp bạn hiểu nguyên nhân và cung cấp các giải pháp hiệu quả để khắc phục hoàn toàn lỗi này. RealDev sẽ hướng dẫn bạn từng bước từ cơ bản đến nâng cao, kèm theo ví dụ code và các trường hợp thực tế để giải quyết triệt để vấn đề này.

Fix lỗi _load_textdomain_just_in_time
Fix lỗi _load_textdomain_just_in_time

Lỗi _load_textdomain_just_in_time là gì?

Lỗi _load_textdomain_just_in_time xuất hiện khi WordPress gặp vấn đề trong quá trình tải các tệp dịch thuật (translation files) cho theme hoặc plugin quá sớm. Lỗi này thường liên quan đến hàm “load_textdomain()” hoặc “load_plugin_textdomain()” – những hàm có nhiệm vụ tải các tệp ngôn ngữ (.mo và .po) để hiển thị nội dung website bằng ngôn ngữ đã được cài đặt.

Khi xuất hiện lỗi này, người dùng có thể thấy nội dung website không được dịch đúng, một số phần vẫn hiển thị bằng ngôn ngữ mặc định (thường là tiếng Anh là mặc định, hoặc hiển thị theo ngôn ngữ được thiết lập trong Cài đặt chung của WordPress) hoặc các thông báo lỗi xuất hiện trong admin_notice hoặc header ngoài frontend hoặc debug log nếu bạn đã bật debug trong wp-config.php

Nguyên nhân phổ biến gây ra lỗi

Có nhiều nguyên nhân khác nhau có thể dẫn đến lỗi _load_textdomain_just_in_time, bao gồm:

  • Thời điểm tải textdomain không phù hợp: WordPress có một thứ tự thực thi các hook và nếu bạn tải textdomain vào sai thời điểm, có thể dẫn đến lỗi này.
  • Cấu trúc thư mục ngôn ngữ không chuẩn: Các tệp dịch phải được đặt trong cấu trúc thư mục phù hợp và được đặt tên theo quy ước của WordPress.
  • Xung đột giữa theme và plugin: Khi nhiều theme hoặc plugin cùng sử dụng cùng một textdomain, có thể xảy ra xung đột.
  • Lỗi cú pháp trong code: Cách sử dụng không đúng các hàm load_textdomain hoặc load_plugin_textdomain.
  • Thiếu tệp dịch: Các tệp .mo hoặc .po không tồn tại hoặc bị hỏng.

Dấu hiệu nhận biết khi gặp lỗi

Làm thế nào để biết bạn đang gặp phải lỗi _load_textdomain_just_in_time? Dưới đây là một số dấu hiệu điển hình:

  • Thông báo lỗi trong console: Thông báo như “Error: _load_textdomain_just_in_time was called incorrectly” xuất hiện trong console trình duyệt hoặc debug log.
  • Nội dung không được dịch: Một số phần của website vẫn hiển thị bằng tiếng Anh mặc dù bạn đã cài đặt ngôn ngữ khác.
  • Lỗi xuất hiện sau khi cập nhật: Lỗi thường xuất hiện sau khi bạn cập nhật WordPress, theme hoặc plugin.
  • Log hiển thị thông báo về textdomain: Nếu WP_DEBUG được bật, bạn có thể thấy các thông báo về việc không tìm thấy tệp dịch hoặc không thể tải textdomain.
Fix lỗi _load_textdomain_just_in_time
Fix lỗi _load_textdomain_just_in_time

Chuẩn bị trước khi khắc phục lỗi

Trước khi bắt tay vào sửa lỗi _load_textdomain_just_in_time, bạn cần thực hiện một số bước chuẩn bị quan trọng để đảm bảo quá trình khắc phục diễn ra an toàn và không làm mất dữ liệu hay gây ra các vấn đề mới.

Sao lưu website

Điều quan trọng nhất trước khi thực hiện bất kỳ thay đổi nào trên website WordPress là tạo một bản sao lưu đầy đủ. Việc này giúp bạn có thể khôi phục website về trạng thái ban đầu nếu có vấn đề xảy ra trong quá trình sửa chữa.

Bạn có thể sao lưu website bằng các cách sau:

  • Sử dụng plugin sao lưu: Có nhiều plugin miễn phí và trả phí giúp bạn dễ dàng sao lưu toàn bộ website, bao gồm cơ sở dữ liệu và tệp tin.
    • UpdraftPlus: Plugin miễn phí phổ biến với nhiều tùy chọn sao lưu
    • BackupBuddy: Giải pháp sao lưu và khôi phục chuyên nghiệp
    • All-in-One WP Migration: Đơn giản hóa việc sao lưu và di chuyển website
  • Sao lưu thủ công: Nếu bạn có kiến thức kỹ thuật, bạn có thể sao lưu thủ công bằng cách:
    • Tải xuống tất cả tệp tin qua FTP
    • Xuất cơ sở dữ liệu thông qua phpMyAdmin hoặc công cụ quản lý DB khác

Kích hoạt chế độ debug để nhận biết các text_domain bị lỗi _load_textdomain_just_in_time

Kích hoạt chế độ debug là bước quan trọng để xác định chính xác nguyên nhân của lỗi _load_textdomain_just_in_time. Việc này sẽ hiển thị các thông báo lỗi chi tiết, giúp bạn hiểu rõ vấn đề hơn.

Để kích hoạt chế độ debug, bạn cần thêm các dòng sau vào file wp-config.php (nằm ở thư mục gốc của WordPress):

// Kích hoạt chế độ Debug
define('WP_DEBUG', true);

// Lưu các thông báo lỗi vào file debug.log
define('WP_DEBUG_LOG', true);

// Không hiển thị lỗi trực tiếp trên trang (tùy chọn)
define('WP_DEBUG_DISPLAY', false);

Sau khi thêm các dòng này, WordPress sẽ ghi lại tất cả các lỗi, bao gồm cả lỗi _load_textdomain_just_in_time, vào file debug.log trong thư mục.

Fix lỗi _load_textdomain_just_in_time
Fix lỗi _load_textdomain_just_in_time

Các cách khắc phục lỗi _load_textdomain_just_in_time

Trong bài đăng này có 3 cách để khắc phục lỗi _load_textdomain_just_in_time, thực tế với người dùng thông thường thì muốn áp dụng cách 2, còn người lập trình nên tham khảo cách 1 để giải quyết dứt điểm vấn đề do _load_textdomain gây ra, cách 3 chỉ đơn giản là tắt debug trong wp-config.php nhưng không giải quyết dứt điểm vấn đề. Khuyến khích của tôi nhanh gọn lẹ là làm cách thứ 2.

Cách 1: Giải quyết dứt điểm dành cho lập trình viên, hoặc người có kỹ thuật

Dựa trên nguyên nhân gây lỗi, chúng ta có thể áp dụng các phương pháp sau để khắc phục lỗi _load_textdomain_just_in_time trong WordPress. Hãy thử lần lượt từng phương pháp cho đến khi vấn đề được giải quyết.

Phương pháp 1: Kiểm tra và sửa lỗi trong file functions.php

  1. Truy cập file functions.php: Đăng nhập vào hosting, truy cập file manager hoặc sử dụng FTP để mở file functions.php trong thư mục theme của bạn.
  2. Tìm các dòng code liên quan đến textdomain: Tìm các hàm như load_textdomain(), load_plugin_textdomain(), hoặc load_theme_textdomain().
  3. Sửa đúng cú pháp và thời điểm load textdomain: Đảm bảo các hàm này được gọi trong hook phù hợp và có cú pháp đúng.

Ví dụ code đúng cách để load textdomain trong theme:

/**
 * Demo cách xử lý chính xác text_domain
 * my-theme là demo cho text_domain mà bạn sử dụng, hoặc muốn áp dụng
 */
 
// Code sai
load_theme_textdomain('my-theme');

// Code đúng
function my_theme_load_textdomain() {
    load_theme_textdomain('my-theme', get_template_directory() . '/languages');
}
add_action('after_setup_theme', 'my_theme_load_textdomain');

Phương pháp 2: Sửa lỗi thông qua cấu trúc thư mục ngôn ngữ

  1. Cấu trúc chuẩn của thư mục language:
    • Đối với theme: /wp-content/themes/your-theme/languages/
    • Đối với plugin: /wp-content/plugins/your-plugin/languages/
  2. Kiểm tra vị trí đặt file .mo và .po: File ngôn ngữ phải được đặt trong thư mục chính xác.
  3. Quy tắc đặt tên file dịch:
    • Cho theme: textdomain-locale.mo (ví dụ: my-theme-vi.mo cho tiếng Việt)
    • Cho plugin: textdomain-locale.mo (ví dụ: my-plugin-fr_FR.mo cho tiếng Pháp)
  4. Tổ chức lại thư mục ngôn ngữ: Nếu cần, hãy di chuyển các file ngôn ngữ vào đúng thư mục và đặt tên theo quy tắc.

Phương pháp 3: Sử dụng hook phù hợp để load textdomain

Việc sử dụng đúng hook là vô cùng quan trọng để tránh lỗi _load_textdomain_just_in_time:

  1. Hook phù hợp cho theme:
    • after_setup_theme: Hook lý tưởng để load textdomain cho theme.
  2. Hook phù hợp cho plugin:
    • plugins_loaded: Hook lý tưởng để load textdomain cho plugin.
  3. Ví dụ code sử dụng hook phù hợp:
/**
 * Load text domain đúng cách cho plugin
 * Thêm đoạn code này vào file functions của plugin, theme
 * my-plugin, my-theme là demo cho text_domain mà bạn sử dụng, hoặc muốn áp dụng
 */
 
// Cho plugin
function my_plugin_load_textdomain() {
    load_plugin_textdomain(
        'my-plugin',
        false,
        dirname(plugin_basename(__FILE__)) . '/languages/'
    );
}
add_action('plugins_loaded', 'my_plugin_load_textdomain');

// Cho theme
function my_theme_load_textdomain() {
    load_theme_textdomain(
        'my-theme',
        get_template_directory() . '/languages'
    );
}
add_action('after_setup_theme', 'my_theme_load_textdomain');

Phương pháp 4: Kiểm tra xung đột giữa theme và plugins

  1. Tắt tạm thời tất cả plugins: Đăng nhập vào WordPress admin, vào Plugins và chọn “Deactivate” cho tất cả.
  2. Kích hoạt từng plugin một: Bật lại từng plugin và kiểm tra xem lỗi có xuất hiện không để xác định plugin gây ra vấn đề.
  3. Xử lý plugin gây xung đột: Nếu tìm thấy plugin gây ra lỗi, bạn có thể:
    • Cập nhật plugin lên phiên bản mới nhất
    • Tìm plugin thay thế có chức năng tương tự
    • Sửa code trong plugin (nếu bạn có kinh nghiệm)
  4. Liên hệ nhà phát triển: Nếu plugin gây lỗi là plugin premium hoặc phức tạp, hãy liên hệ với nhà phát triển để được hỗ trợ.

Code function cơ bản để sửa lỗi

/**
 * Load text domain đúng cách cho theme
 * Thêm đoạn code này vào file functions.php của theme
 * mytheme là demo cho text_domain mà bạn sử dụng, hoặc muốn áp dụng
 */

// Đảm bảo chúng ta không load trực tiếp
if (!defined('ABSPATH')) {
    exit; // Thoát nếu được truy cập trực tiếp
}

/**
 * Hàm load textdomain cho theme
 * Sử dụng hook after_setup_theme là thời điểm thích hợp
 */
function mytheme_load_theme_textdomain() {
    // Thay 'mytheme' bằng textdomain của theme bạn
    // Thư mục languages/ nằm trong thư mục theme
    load_theme_textdomain(
        'mytheme', 
        get_template_directory() . '/languages'
    );
}

// Sử dụng hook after_setup_theme với ưu tiên mặc định (10)
add_action('after_setup_theme', 'mytheme_load_theme_textdomain');

/**
 * Đối với child theme, sử dụng đoạn code sau nếu cần
 */
function mychildtheme_load_child_textdomain() {
    // Thay 'mychildtheme' bằng textdomain của child theme
    load_child_theme_textdomain(
        'mychildtheme',
        get_stylesheet_directory() . '/languages'
    );
}
add_action('after_setup_theme', 'mychildtheme_load_child_textdomain', 11);

Phương pháp 5: Sửa lỗi bằng plugin Translation Management

Sử dụng các plugin quản lý dịch thuật có thể giúp khắc phục vấn đề:

  1. Loco Translate: Plugin dịch thuật miễn phí, dễ sử dụng cho WordPress.
  2. WPML: Giải pháp đa ngôn ngữ toàn diện (plugin premium).
  3. Polylang: Plugin miễn phí với nhiều tính năng để quản lý nội dung đa ngôn ngữ.
  4. Cách sử dụng: Các plugin này thường có công cụ quét để phát hiện và sửa các vấn đề với textdomain, giúp bạn quản lý các tệp ngôn ngữ một cách hiệu quả.

Cách 2: Dành cho người dùng thông thường hoặc muốn xử lý nhanh vấn đề

Sau đây là các đoạn code chi tiết giúp bạn khắc phục triệt để lỗi _load_textdomain_just_in_time trong WordPress. Các giải pháp này đã được kiểm chứng và áp dụng thành công cho nhiều trường hợp tương tự.

Ở đây mình đã liệt kê một số mục phổ biến, tất nhiên bạn có thể thêm vào các mục khác theo website của bạn, bọc vào trong dấu nháy '' và phân cách nhau bằng dấu ,

function realdev_textdomain_warning($trigger, $function_name, $message, $version) {
    if ('_load_textdomain_just_in_time' !== $function_name || '6.7.0' !== $version) {
        return $trigger;
    }
    $textdomains = array(
        'admin-site-enhancements',
      	'advanced-custom-fields',
        'advanced-custom-fields-pro',
        'cf7-database',
        'contact-form-7',
        'kk-star-ratings',
        'seo-by-rank-math',
        'seo-by-rank-math-pro',
      	'wordpress-seo',
      	'wordpress-seo-premium',
        'tinymce-advanced',
        'woocommerce',
        'flatsome',
    );
    foreach ($textdomains as $textdomain) {
        if (strpos($message, '<code>' . $textdomain . '</code>') !== false) {
            return false;
        }
    }
    return $trigger;
}
add_filter('doing_it_wrong_trigger_error', 'realdev_textdomain_warning', 10, 4);

Cách 3: Tắt Debug để không hiển thị lỗi

Cách làm này nói đúng ra chỉ ẩn để giải quyết việc in lỗi ra debug hoặc admin notice. Nhưng lại không xử lý dứt điểm vấn đề. Cáhc làm bạn truy cập vào hosting/vps tìm đến vị trí public_html/wp-config.php để sửa lại như sau:

// Tắt chế độ Debug
define('WP_DEBUG', false);

// Tắt Lưu các thông báo lỗi vào file debug.log
define('WP_DEBUG_LOG', false);

// Tắt hiển thị lỗi trực tiếp trên trang
define('WP_DEBUG_DISPLAY', false);

Về cơ bản bạn chỉ cần tắt define('WP_DEBUG', false); là được.

Lời khuyên

Trong bài đăng này mình đã hướng dẫn rất chi tiết cho nhiều hoàn cảnh và định hướng sửa lỗi cảnh báo _load_textdomain_just_in_time , tuy nhiên cách làm nhanh, gọn, lẹ, đơn giản nhất vẫn là cách 2, bằng cách thêm vào functions.php và chỉ định các textdomain của plugin, theme thì nó sẽ tự động bỏ qua check, từ đó bạn không phải gặp các thông báo khó chịu mà vẫn có thể debug một cách toàn diện trong việc phát triển code, tính năng.

Tuy nhiên, dù thế nào đi chăng nữa thì việc giải quyết dứt điểm việc gọi textdomain quá sớm vẫn là một phương pháp toàn diện trong việc vận hành lâu dài và hiệu quả.

Hướng dẫn Sử dụng

Để sử dụng [Hoạt động 100%] – Fix lỗi _load_textdomain_just_in_time rất đơn giản. Bạn hãy thêm Function được hướng dẫn trong Bài đăng này vào vị trí theo các bước chi tiết trong hướng dẫn dưới đây.

Đối với phần Functions:

  • Bước 1: Truy cập vào Admin Dashboard tìm đến Giao diện (Themes) / Theme File Editor / Functions.php.
  • Bước 2: Cuộn xuống dưới cùng của trình chỉnh sửa, dán Code sau vào cuối tệp và lưu lại.
  • Bước 3: Chú ý, một số trường hợp cần Clear Cache nếu bạn đang sử dụng các Plugin Cache như WP Rocket, LiteSpeed Cache, ..etc
  • Bước 4: Thưởng thức

Đối với phần CSS:

  • Bước 1: Ở ngoài Front End (Giao diện người dùng, ví dụ Trang chủ). Trên thanh điều hướng Admin Bạn truy cập vào Tùy Biến (Customize) và tìm đến phần Custom CSS.
  • Bước 2: Copy phần CSS và dán vào cuối phần chứa mã CSS và Lưu lại.
  • Bước 3: Tải lại trang (Reload Page) hiển thị phần CSS trên. Chú ý, một số trường hợp cần Clear Cache nếu bạn đang sử dụng các Plugin Cache như WP Rocket, LiteSpeed Cache, ..etc.
  • Bước 4: Thưởng thức

MẸO: Bạn có thể sử dụng phím tắt để Tải lại trang không kèm Cache, tuy nhiên vẫn cần chú ý Clear Cache với các Plugin tạo Cache như Bước 3.

Với Windows: Ctrl + Shift + R
Với macOS: Command + Shift + R

Lời ngỏ từ RealDev

Để viết lên được một bài đăng tâm huyết thì mình cũng mất rất nhiều thời gian cho việc viết code, viết content, tạo ảnh, thêm các hướng dẫn custom nên đừng tiếc tặng mình một đánh giá, reviews thật lòng nhé. Điều này rất quan trọng vì nó giúp mình có thêm động lực và niềm vui cho đi hơn.!

Các Function / Kiến thức được chia sẻ trên RealDev đều hoàn toàn tham khảo từ các nguồn chính thống của WordPress / Themes và Plugins. Bản thân mình thấy nó có ích và muốn chia sẻ tới nhiều người để hiểu hơn. Hãy sử dụng cẩn thận và chắc chắn nếu bạn có kiến thức về Website WordPress và tránh xung đột các tên Functions. Mọi sự hỗ trợ hãy Comment, để được giúp đỡ.

Chúc một ngày giàu năng lượng và nhiều tốt lành, may mắn đến Bạn và Gia đình.!

Nếu bạn cần mình hỗ trợ thêm, hoặc muốn liên hệ mình làm Dịch vụ nào đó liên quan đến Website WordPress thì mình luôn sẵn sàng phục vụ bạn bằng tất cả cái Tâm và Tầm mình có. Liên hệ mình theo một trong nhiều phương cách dưới đây:

Thân mến và Trân trọng tín nhiệm của Bạn.!

4.5/5 - (159 Yêu thích)

Về Tác giả

RealDev
Founder
Trần Đạo aka RealDev là một lập trình viên PHP, một SEO chuyên nghiệp, làm việc toàn thời gian và lâu năm với WordPress. Tôi có nhiều kinh nghiệm cho các dự án SEO. Tôi cũng đã tham gia vào thiết kế, vận hành các Website WordPress trong nhiều lĩnh vực như TMĐT, Nội thất, Du lịch, Văn phòng, Công ty, Đơn vị ... Tôi cũng là chủ sở hữu Website RealDev.vn và cũng là nhà sáng lập cộng đồng VietCoders Community. Tôi là Founder và CEO của RealGOOD Quintessence JSC.
Xem thêm

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Zalo Zalo
Phone Phone
Đã Copy vào Bộ nhớ tạm
Trang web này sử dụng cookie để mang đến cho bạn trải nghiệm duyệt web tốt hơn. Bằng cách duyệt trang web này, bạn đồng ý với việc chúng tôi sử dụng cookie.