Gắn biểu tượng sự kiện cạnh logo bằng shortcode

Thủ thuật này giúp bạn dễ dàng hiển thị biểu tượng sự kiện (ví dụ: Trung Thu, 20/10, noel…) cạnh logo mà không cần chỉnh sửa lại template mỗi lần.

Giới thiệu

  • Không cần sửa lại template mỗi sự kiện.
  • Thêm nhanh qua widget HTML.
  • Tự động ẩn khi hết event.

Code

Dán code bên dưới trong template
<style id="evt-icon-base">
[data-event-slot]{display:none!important;}
@keyframes lanternSwing{0%{transform:rotate(-6deg)}50%{transform:rotate(6deg);filter:drop-shadow(0 0 10px rgba(255,235,59,.6))}100%{transform:rotate(-6deg)}}
.logotop {position: relative;display: inline-block;}
</style>

<script>
//<![CDATA[
(function(){
"use strict";
var LOGO_WRAP_SEL=".logotop";
function applyStyle(el){
el.style.position="absolute";
el.style.top="-15px";
el.style.display="inline-block";
el.style.verticalAlign="middle";
el.style.transformOrigin="top center";
el.style.animation="lanternSwing 3.8s ease-in-out infinite";
el.style.width = "50px";
}
function parseShortcode(txt){
if(!txt)return null;
var e=txt.match(/\[event\]([\s\S]*?)\[\/event\]/i);
var d=txt.match(/\[end\](.*?)\[\/end\]/i);
return e?{svg:e[1].trim(),end:d?d[1].trim():null}:null;
}
function validDate(dateStr){
if(!dateStr)return true;
var now=new Date();
var end=new Date(dateStr.replace(/(\d{2})\/(\d{2})\/(\d{4})/,"$2/$1/$3"));
return now<=end;
}
function init(){
var w=document.querySelector("[data-event-slot]");
if(!w)return;
var t=parseShortcode(w.innerHTML);
if(!t)return;
if(!validDate(t.end))return;
var logo=document.querySelector(LOGO_WRAP_SEL);
if(!logo)return;
w.style.display="none";
var h=document.createElement("span");
h.setAttribute("aria-hidden","true");
applyStyle(h);
h.innerHTML=t.svg;
logo.appendChild(h);
}
if(document.readyState!=="loading")init();
else document.addEventListener("DOMContentLoaded",init);
})();
/*]]>*/
</script>

⚠️ Lưu ý về phần tử .logotop

Nếu template của bạn dùng selector khác (ví dụ .header-logo hoặc #logo-wrap), hãy cập nhật dòng:
var LOGO_WRAP_SEL = ".logotop";

trong đoạn script cho phù hợp với cấu trúc trang của bạn.

Tạo widget HTML

Vào Bố cục → Thêm tiện ích → HTML/Javascript, dán nội dung sau:
<div data-event-slot>
[event]
<svg viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="40" fill="#ff6b88"></circle>
</svg>
[/event]
[end]31/10/2025[/end]
</div>
  • Bạn có thể thay phần <svg>...</svg> bằng bất kỳ biểu tượng nào cho sự kiện, ví dụ trái tim, hoa, pháo hoa, đèn lồng,…
  • 31/10/2025 thành thời gian kết thúc event

Hoạt động tự động

  • Tự động hiển thị biểu tượng cạnh logo.
  • Biểu tượng lắc nhẹ nhờ animation lanternSwing.
  • Hết hạn ([end]) → tự ẩn, không cần xóa thủ công.

About the author

Đỗ Thu Hoài
Ko biết để gì cho hợp lý! https://www.threads.com/@dwo_th

16 comments

  1. Anh Trai Nắng
    sao bên tui làm nó ko hiển thị ta?
  2. A Đê Min
    Gắn code vào chưa để tôi kiểm tra thử
  3. Anh Trai Nắng
    gắn vào sáng giờ rồi vẫn để đó á
  4. A Đê Min
    Chưa thấy gắn shortcode vào mà, đoạn này này
    [pre]<div data-event-slot>
    [event]
    <svg viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="#ff6b88"></circle>
    </svg>
    [/event]
    [end]31/10/2025[/end]
    </div>[/pre]
  5. Anh Trai Nắng
    đoạn này bỏ trong widget html rồi mà
  6. A Đê Min
    Tôi kiểm tra thì thấy hiện tại blog của ông đang có các widget HTML3 (Nhận xét mới), HTML5 (ADS), HTML2 (random post) chứ không thấy widget HTML nào khác nữa 😁
  7. Anh Trai Nắng
    nãy là có bỏ vào Widget ADS đó
  8. Anh Trai Nắng
    đã cài. F5 thấy nó nhảy ở chỗ Logo 1 phát nhưng không hiển thị
  9. A Đê Min
    hiểu rồi, chưa cố định chiều rộng cho biểu tượng gắn vào 😁
    Thêm vào hàm applyStyle(el) đoạn sau
    [pre]el.style.width = "50px";[/pre]
    Sửa 50px cho phù hợp
  10. Anh Trai Nắng
    ok hiện rồi nhưng nó chỉ hiện ở bài viết, trang chủ ko hiện, thêm các thuộc tính khác như margin-top hay z-index cũng ko được luôn!
  11. A Đê Min
    Biểu tượng của ông bị lệch do đoạn code này
    [pre]audio, canvas, embed, iframe, img, object, svg, video {
    display: block;
    vertical-align: middle;
    }[/pre]
    Phương án đề xuất là thêm
    [pre].header-widget svg{display: inline-block!important;}[/pre]

    Không hiển thị do HTML1 chắc đang chỉ cho hiển thị ở trang bài viết 😁
  12. Anh Trai Nắng
    đang muốn chỉnh thuộc tính cho nó canh treo vô cái nhành mai luôn nè, mà chỉnh xong mất tiêu 🤣
  13. A Đê Min
    Như blog của ông sửa
    [pre]el.style.top="-15px";[/pre]
    Thành
    [pre]el.style.top="26px";[/pre]
    Là đẹp 😁
  14. Anh Trai Nắng
    thêm z-index:99 chỗ style trên nữa bao đẹp luôn rồi kkk
  15. A Đê Min
    Ngon rồi, như thật 🤣
  16. Tomorrow
    Hay