- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Trong các bài trước, chúng ta đã học được cách tạo shortcode trong wordpress, sử dụng các hàm wordpress. Trong trường hợp, bạn muốn thay đổi cách sử lý mặc định của code shortcode tạo ra trước đó, mà không muốn can thiệp trực tiếp vào mã của plugin của shortcode này. Vậy phải làm thế nào? Đây là ước mơ của những ai viết code, rất muốn thuận tiện khi nâng cấp plugin hay loại bỏ tính năng cài thêm vào một tính năng sẵn có.
Sửa thuộc tính shortcode trong wordpress
Wordpress có cung cấp filter tiện ích cho shortcode, giúp bạn dễ dàng sửa lại thuộc tính của shortcode. Mình sẽ tạo một shortcode đơn giản để minh hoạt cho bài này.
function simple_shortcode($atts) { $pairs=array('name'=>'Mr.Hoang','age'=>'24'); extract(shortcode_atts($pairs,$atts,'testfilter')); echo $name.'-'.$age; } add_shortcode( 'testfilter', 'simple_shortcode' );
Gọi shortcode này, bạn sẽ nhận kết quả: “Mr.Hoang-24”.
Mỗi một shortcode trước khi thực thi đều sử lý filter tương ứng với shortcode đó, tên filter này có dạng shortcode_atts_{$shortcode}. Thay {$shortcode} là tên của shortcode. Chúng ta sẽ can thiệp vào các thuộc tính của shortcode estfilter
ngay bây giờ. Bằng cách thiết lập lại thuộc tính của shortcode, dữ liệu và kết quả trả về của nó sẽ bị thay đổi. Điều này hiển nhiên đúng theo logic, vì khi tạo ra một shortcode tốt sẽ luôn dùng thuộc tính được truyền vào bởi người dùng để sử lý dữ liệu.
Ví dụ chèn shortcode trên vào post/page.
[testfilter name="Q.Huy" age="25"]
Kết quả sẽ print ra chuỗi “Q.Huy-25”
Sử dụng filter shortcode
Thêm filter cho shortcode “testfilter” như sau:
add_filter('shortcode_atts_testfilter','filter_sc',10,3); function filter_sc($out, $pairs, $atts){ if($out['age']>22) $out['name']='Khanh'; else $out['age'] = '21'; return $out; }
Mỗi lần sử dụng (gọi) shortcode là một lần chạy filter này. Filter có 3 tham số.
- $out: giá trị thuộc tính cuối cùng cho shortcode, là kết quả giữa thuộc tính mặc định và thuộc tính của người dùng.
- $pairs: giá trị thuộc tính mặc định của shortcode.
- $atts: giá trị thuộc tính cung cấp bởi người dùng.
Nếu mình gọi:
[testfilter name="A" age="20"] [testfilter name="B"]
Trước khi sửa bởi filter shortcode, bạn sẽ thấy 3 tham số có giá trị tương ứng là:
Lần gọi 1
$out: array("name"=>"A","age"=>"20")
$pairs: array("name"=>"Mr.Hoang","age"=>"24")
$atts: array("name"=>"A","age"=>"20")
Lần gọi 2:
$out: array("name"=>"B","age"=>"24")
$pairs: array("name"=>"Mr.Hoang","age"=>"24")
$atts: array("name"=>"B","age"=>"24")
Sau khi dùng filter shortcode_atts_{$shortcode}
, kết quả có thay đổi:
Lần gọi 1
$out: array("name"=>"A","age"=>"21")
$pairs: array("name"=>"Mr.Hoang","age"=>"24")
$atts: array("name"=>"A","age"=>"20")
Lần gọi 2:
$out: array("name"=>"Khanh","age"=>"24")
$pairs: array("name"=>"Mr.Hoang","age"=>"24")
$atts: array("name"=>"B","age"=>"24")
Lưu ý tính năng filter shortcode được chỉ định do hàm shortcode_atts
. Trong khi định nghĩa shortcode, nếu bạn muốn bật tính năng filter cho shortcode đó thì khai báo vào tên shortcode vào tham số thứ 3 của hàm này, giống như ở trên mình đã khai báo. Nếu shortcode của bạn không dùng đến hàm shortcode_atts
hoặc không kích hoạt tính năng filter thì cũng vô tác dụng.
Rõ ràng sử dụng filter shortcode, đã có thể thay đổi kết quả trả về của shortcode mà không cần phải chỉnh sửa lại code đăng ký shortcode cho vất vả và gây khó bảo trì cho web về sau. Thật tuyệt vời phải không.
Hi vọng bài viết này, sẽ giúp ích cho bạn. Nếu thích bài này hãy để lại comment và ấn like nhóe.
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype