Liên quan tới việc hiển thị string trong mã nguồn wordpress, ta có khá nhiều hàm với các chức năng khác nhau như: esc_html(), esc_html__(), esc_html_e(), esc_attr, esc_html_x, esc_attr_e()… Trong khuôn khổ bài viết này, chúng ta cùng nghiên cứu vè 3 hàm cơ bản và hay sử dụng nhất trong quá trình làm theme hay plugins là esc_html_e(), esc_html__(), esc_html().
Table of Contents
Hàm esc_html()
Hàm này có chức năng gần tương tự như strip_tags trong PHP, và encode các mã html để hiển thị ra màn hình của người dùng. Nói một cách nôm na là nó chuyển đoạn mã html hiển thị ra mà không bị chuyển đổi. Ví dụ bạn có một đoạn code hiển thị link muốn cho người đọc xem code thì dùng esc_html() để hiển thị. Vì bình thường nếu cho code html thì ra ngoài nó sẽ hiện luôn cái liên kết đó. Các bạn có thể tìm thấy hàm esc_html() tại file này: wp-includes/formatting.php. Đây là hàm nguyên bản của WordPress:
function esc_html( $text ) { $safe_text = wp_check_invalid_utf8( $text ); $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES ); /** * Filters a string cleaned and escaped for output in HTML. * * Text passed to esc_html() is stripped of invalid or special characters * before output. * * @since 2.8.0 * * @param string $safe_text The text after it has been escaped. * @param string $text The text prior to being escaped. */ return apply_filters( 'esc_html', $safe_text, $text ); }
Cách sử dụng hàm esc_html()
Hàm esc_html() trả về dạng string và sẽ KHÔNG hiện ra trên trình duyệt. Muốn hiện nội dung trả về của hàm esc_html() thì bạn phải echo nó ra.
$html = esc_html( '<a href="https://huyhoa.net">Huy Hoa</a>' );
Giá trị trả về sẽ là:
<a href="https://huyhoa.net">Huy Hoa</a>
Như các bạn thấy, đoạn html bên trên đã được encode, và như vậy khi echo ra nó sẽ hiện y như này:
<a href=”https://huyhoa.net”>Huy Hoa</a> thay vì hiển thị như này: Huy Hoa
Tham khảo các hàm hay sử dụng trong wordpress:
Hàm esc_html_e()
Có một hàm tương tự và nhìn khá giống hàm esc_html(), và có chức năng tương tự là esc_html_e()
Sự khác nhau giữa hàm esc_html với hàm esc_html_e() là hàm esc_html_e() sẽ dịch (nếu website có nhiều ngôn ngữ) và hiển thị luôn cái đoạn code html cần hiển thị. Bạn không cần phải echo nó nữa. Hàm esc_html_e() có thể được tìm thấy trong file này: wp-includes/l10n.php.
function esc_html_e( $text, $domain = 'default' ) { echo esc_html( translate( $text, $domain ) ); }
Cách sử dụng hàm esc_html_e()
Hàm esc_html_e() dịch đoạn văn bản và mã hóa html code rồi hiển thị ra màn hình. Cách sử dụng như sau:
<h1><?php esc_html_e( 'Title', 'text-domain' )?></h1>
Đoạn code bên trên sẽ dịch Title tùy theo từng ngữ cảnh cụ thể trên web của bạn. Lưu ý là hàm esc_html_e() nó mã hóa html nên trong tham số $text thì bạn không thể để html hay là tham số $value của PHP, vì nó sẽ mã hóa luôn tham số đó. Nếu bạn muốn dịch và kèm tham số thì thay vì dùng hàm esc_html_e() thì các bạn có thể dùng hàm translate. Ví dụ:
echo translate( "Bài này được cập nhật lần cuối lúc: ", 'huyhoa' ); echo $date('H:i:s, d-m-Y');
Hàm esc_html__()
Hàm esc_html__() chính là phiên bản không echo của hàm esc_html_e() ở bên trên. Hàm này có chức năng tương tự như hàm esc_html_e() nhưng mà trả về giá trị string chứ không hiển thị ra màn hình.
Các bạn cũng có thể tìm thấy hàm này tại file: wp-includes/l10n.php.
function esc_html__( $text, $domain = 'default' ) { return esc_html( translate( $text, $domain ) ); }
Như các bạn có thể thấy, hàm này nó chính là hàm esc_html() bên trên nhưng nó kèm theo hàm translate để dịch tham số text.
Cách sử dụng hàm esc_html__()
Hàm esc_html__() dịch đoạn văn bản, mã hóa html code trong đó rồi trả về giá trị là dạng string. Muốn sử dụng nó để hiển thị ra màn hình thì bạn phải echo nó ra.
esc_html__( "Bài này được <b>cập nhật</b> lần cuối lúc: ", 'huyhoa' );
Các bạn có thể thấy, hàm esc_html__() và hàm esc_html_e() có chức năng tương tự nhau. Sự khác nhau là esc_html__() thì KHÔNG hiển thị (tức không echo nội dung), còn hàm esc_html_e() thì HIỂN THỊ nội dung ra bên ngoài trình duyệt.
Ttham khảo thêm thông tin của các hàm này ở trang hỗ trợ chính thức trên trang WordPress for Developer
Hàm esc_html__(): tại đây.
Hàm esc_html(): tại đây.
Hàm esc_html_e(): tại đây.