Tạo plugin chèn thuộc tính nofollow cho external link

Tạo plugin chèn thuộc tính nofollow cho external link

Một trong những vẫn đề cân nhắc trước khi đặt link ra ngoài website đó chính là thêm thuộc tính rel=”nofollow” cho liên kết đó. Google cũng khuyến khích những website nên đặt liên kết noffow cho trang web của mình nhằm ưu tiên thu thập dữ liệu trên website của mình hơn. Có nhiều Plugin cho thể được sử dụng để thực hiện việc này. Tuy nhiên bạn có thể tự viết ra một plugin để thực hiện việc này, tránh việc phải cài đặt plugin bên ngoài, khó kiểm soát nó được. Trong bài này mình sẽ chia sẻ với bạn cách tạo ra một Plugin biến mọi liên kết ra ngoài website của bạn trong bài viết thành liên kết noffolow.

Tạo plugin nofollow

Bạn có thể xem lại bài viết Hướng dẫn tạo một Plugin đơn giản bằng WordPress để có thể hiểu hơn về cách tạo một plugin, trong bài này mình sẽ không đi chi tiết về cách tạo plugin nữa mà sẽ thực hành thực tế luôn.

Bây giờ mình sẽ tạo ra một thư mục plugin có tên nof-external, sau đó mình sẽ tạo ra một tệp php có tên fn_nof_ext.php. Mở file này lên và code đoạn sau vào:

<?php
/*
  Plugin Name: Nofollow-External
  Plugin URI: https://tuandc.com/
  Description: Plugin thêm rel="nofollow" cho liên kết ngoài
  Version: 1.0
  Author: Tuấn ĐC
  Author URI: https://tuandc.com/
  License: GPL
*/

Bạn có thể thay đổi một số thông tin để phù hợp với bạn.

Bây giờ nên kích hoạt plugin này

Bây giờ nên kích hoạt plugin này

Code cho plugin nofollow

Bây giờ mình sẽ viết hàm để lọc nội dung, sau đó chèn thẻ nofollow vào các liên kết có domain khác với domain chính của trang web như sau:

function add_nofollow_content($content) {
 $content = preg_replace_callback('/]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i', 
   function($no) {
     if (strpos($no[1], home_url()) === false)
       return '<a href="'.$no[1].'" rel="nofollow" target="_blank">'.$no[2].'</a>';
     else
       return '<a href="'.$no[1].'" target="_blank">'.$no[2].'</a>';
     }, $content);
  return $content;
}
  • Hàm add_nofollow_content sẽ được tạo và tham số đầu vào là $content là nội dung của post. Giá trị trả về của hàm là biến $content đã qua xử lý.
  • Hàm preg_replace_callback() sẽ được sử dụng để xử lý nội dung cho biến $content được giải thích như sau:
    • preg_replace_callback: có 3 tham số bao gồm  regular expression, function, content.
    • /]*href=["|\']([^"|\']*)["|\'][^>]*>([^<]*)<\/a>/i: Đoạn “mỳ tôm” này được gọi là chuỗi regular expression mô tả cấu trúc của thẻ <a>, cái này hơi khó giải thích tí nhưng bạn cứ tưởng tượng mỗi đoạn “(…)” là một biến số đi, và chúng được đánh dấu từ 1 trở lên. Mục đích sử dụng cái này là để lấy ra hai tham số quan trọng trong link đó là liên kết và textlink.
    • function($no): hàm này sẽ làm hàm xử lý chính, nó có 2 điều kiện, là những link không thuộc domain sẽ được chèn rel="nofollow" và ngược lại thì không chèn. $no[1] và $no[2] là hai biến lưu trữ link và text link được lấy từ regular expression. strpos() là hàm trả về giá trị true hoặc false khi so sánh hai chuỗi, home_url() là hàm của WordPress dùng để lấy ra domain của site chính.
    • $content: là biến lưu trữ toàn bộ nội dung cần thay thế.
  • Sau khi được gán nội dung xử lý trở lại biến $content, nó sẽ được return.

Bạn thêm đoạn code trên vào trong file fn_nof_ext.php mình đã tạo ở Plugin.

Để hoàn thành công việc này, bạn cần sử dụng một hook fillter có tên là the_content để móc hàm vào trả kết quả lọc ra nội dung.

add_filter('the_content', 'add_nofollow_content');

Kết quả sau khi hoàn thành.

Các liên kết ngoài đã được thêm thuộc tính nofollow (gạch ngang)

Các liên kết ngoài đã được thêm thuộc tính nofollow (gạch ngang)

Mở rộng Plugin

Bạn có thể mở rộng Plugin này bằng cách tạo thêm bảng điều khiển cho phép người dùng tùy chọn, ví dụ như thêm những liên kết ngoại lệ, bỏ thuộc tính target="_blank", bỏ thuộc tính rel="nofollow", xóa liên kết,… Để làm được điều này bạn có thể tham khảo lại bài Tạo menu và form nhập liệu vào database trong control panel admin WordPress nhé.

Chúc bạn thành công !