Changeset 356992
- Timestamp:
- 11/03/2026 02:00:05 PM (6 hours ago)
- Location:
- simple-tn/1.3.18
- Files:
-
- 16 added
- 21 edited
- 1 copied
-
. (copied) (copied from simple-tn/1.2.9 )
-
accessibility.txt (added)
-
assets/css/blocks/navigation.css (modified) (2 diffs)
-
assets/css/blocks/search.css (modified) (2 diffs)
-
assets/css/blocks/table.css (modified) (2 diffs)
-
assets/css/settings.css (added)
-
assets/css/theme.css (modified) (16 diffs)
-
assets/css/toc.css (added)
-
assets/js (added)
-
assets/js/block-width.js (added)
-
assets/js/header.js (added)
-
assets/js/toc.js (added)
-
functions.php (modified) (1 diff)
-
inc/dark-mode.php (added)
-
inc/query.php (modified) (4 diffs)
-
inc/search.php (modified) (3 diffs)
-
inc/settings.php (added)
-
inc/setup.php (modified) (3 diffs)
-
inc/toc.php (added)
-
languages/simple-tn.pot (modified) (13 diffs)
-
patterns/404-content.php (modified) (1 diff)
-
patterns/footer-default.php (modified) (1 diff)
-
patterns/header-centered.php (modified) (1 diff)
-
patterns/header-default.php (modified) (2 diffs)
-
patterns/hero-latest-post.php (modified) (1 diff)
-
patterns/post-list.php (modified) (2 diffs)
-
patterns/search-header.php (modified) (1 diff)
-
patterns/search-results.php (modified) (2 diffs)
-
readme.txt (modified) (8 diffs)
-
style.css (modified) (1 diff)
-
styles/forest.json (added)
-
styles/lavender.json (added)
-
styles/ocean.json (added)
-
styles/rose.json (added)
-
styles/slate.json (added)
-
styles/terracotta.json (added)
-
styles/warm.json (modified) (1 diff)
-
theme.json (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
simple-tn/1.3.18/assets/css/blocks/navigation.css
r356199 r356992 120 120 } 121 121 122 /* 123 * Submenu trong footer mở ngược lên trên. 124 * Footer luôn nằm ở cuối trang nên panel mở xuống dưới sẽ bị mép dưới cửa sổ cắt mất. 125 * Căn phải theo mục cha để panel không tràn ra ngoài khi menu footer nằm sát lề phải. 126 */ 127 .tn-footer .wp-block-navigation :is(.wp-block-navigation__container, .wp-block-page-list) > .has-child > .wp-block-navigation__submenu-container { 128 bottom: 100%; 129 left: auto; 130 right: -1px; 131 top: auto; 132 } 133 134 /* Submenu cấp 2 trở xuống: mở sang trái, canh đỉnh theo mục cha (panel cấp 1 đã căn phải). */ 135 .tn-footer .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container { 136 bottom: auto; 137 left: auto; 138 right: 100%; 139 top: 0; 140 } 141 122 142 /* Mô tả mục menu (nếu có) chỉ dành cho trình đọc màn hình, không chiếm chỗ trên header. */ 123 143 .wp-block-navigation .wp-block-navigation-item__description { … … 129 149 width: 1px; 130 150 } 151 152 /* Overlay and wrapping footer menus may contain labels without spaces. */ 153 .wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item, 154 .tn-footer .wp-block-navigation .wp-block-navigation-item { 155 max-width: 100%; 156 min-width: 0; 157 overflow-wrap: anywhere; 158 } 159 160 @media (max-width: 781px) { 161 .wp-block-navigation .wp-block-navigation-item__content, 162 .wp-block-navigation .wp-block-navigation-submenu__toggle { 163 box-sizing: border-box; 164 min-height: 44px; 165 min-width: 44px; 166 } 167 } -
simple-tn/1.3.18/assets/css/blocks/search.css
r356199 r356992 5 5 6 6 .wp-block-search .wp-block-search__input { 7 min-width: 0; 7 8 background: var(--wp--preset--color--base); 8 9 border: 1px solid color-mix(in srgb, var(--wp--preset--color--muted) 78%, var(--wp--preset--color--base)); … … 27 28 28 29 .wp-block-search .wp-block-search__button { 30 flex-shrink: 0; 29 31 background: var(--wp--preset--color--accent); 30 32 border: 0; -
simple-tn/1.3.18/assets/css/blocks/table.css
r356199 r356992 7 7 .wp-block-table { 8 8 overflow-x: auto; 9 -webkit-overflow-scrolling: touch; 9 10 } 10 11 … … 12 13 border-collapse: collapse; 13 14 width: 100%; 15 } 16 17 /* Auto layout: retain intrinsic word widths instead of inheriting anywhere from post content. */ 18 .wp-block-table table:not(.has-fixed-layout) { 19 table-layout: auto; 20 } 21 22 .wp-block-table table:not(.has-fixed-layout) :is(th, td) { 23 word-break: normal; 24 overflow-wrap: break-word; 14 25 } 15 26 -
simple-tn/1.3.18/assets/css/theme.css
r356199 r356992 10 10 * - Nút, nhãn dạng chip: bo tròn hoàn toàn. 11 11 * - Ô nhập liệu: 10px. 12 * Chỉ có CSS, không có JavaScript; mọi chuyển động đều tắt theo prefers-reduced-motion trong theme.json. 12 * JavaScript bổ trợ: chuyển nền tối và thu gọn menu header khi không đủ chỗ. 13 * Mọi chuyển động đều tắt theo prefers-reduced-motion trong theme.json. 13 14 */ 14 15 … … 21 22 } 22 23 24 /* 25 * Nền tối: bật bằng nút trên header (html[data-theme="dark"]). 26 * Bảng màu tối do người dùng chỉnh trong Giao diện > Simple TN và được in 27 * thành biến --wp--preset--color--* trong head (inc/dark-mode.php). 28 */ 29 html[data-theme="dark"] { 30 color-scheme: dark; 31 } 32 33 /* Nút core dùng màu hover cố định trong theme.json; đổi theo accent của nền tối. */ 34 html[data-theme="dark"] :is(.wp-element-button, .wp-block-button__link):hover { 35 background-color: color-mix(in srgb, var(--wp--preset--color--accent) 82%, #000); 36 color: var(--wp--preset--color--accent-contrast); 37 } 38 23 39 /* -------------------------------------------------------------------------- 24 40 * Nền chung … … 26 42 27 43 html { 44 background-color: var(--wp--preset--color--base); 45 color-scheme: light; 28 46 scroll-padding-top: 5.5rem; 29 47 } … … 32 50 -webkit-font-smoothing: antialiased; 33 51 -moz-osx-font-smoothing: grayscale; 52 } 53 54 /* Long titles, URLs and taxonomy labels must fit their own column. */ 55 :where(.wp-block-post-title, .wp-block-query-title, .wp-block-site-title, .wp-block-site-tagline, .wp-block-post-terms, .wp-block-post-content, .wp-block-comment-content, .wp-block-comment-author-name, .post-navigation-link__title, .tn-related h3, .tn-footer__bottom) { 56 overflow-wrap: anywhere; 57 } 58 59 .tn-related__card > *, 60 .tn-hero__inner > *, 61 .tn-footer__top > * { 62 min-width: 0; 34 63 } 35 64 … … 186 215 .tn-header__actions { 187 216 align-items: center; 217 flex: 1 1 0; 218 justify-content: flex-end; 219 min-width: 0; 220 } 221 222 .tn-header > .wp-block-group > .wp-block-group:first-child { 223 flex: 0 1 auto; 224 max-width: 45%; 225 min-width: 0; 226 } 227 228 .tn-header .wp-block-site-logo, 229 .tn-header__actions > .tn-search, 230 .tn-theme-toggle { 231 flex-shrink: 0; 232 } 233 234 .tn-header .wp-block-site-title { 235 min-width: 0; 236 overflow-wrap: anywhere; 237 } 238 239 .tn-header__actions > .wp-block-navigation { 240 flex: 1 1 0; 241 min-width: 44px; 242 } 243 244 /* Measure the full desktop menu; never squeeze labels or its theme toggle. */ 245 .tn-nav--header { 246 max-width: 100%; 247 } 248 249 .tn-nav--measured .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__responsive-container-content, 250 .tn-nav--measured .wp-block-navigation__responsive-container:not(.is-menu-open) :is(.wp-block-navigation__container, .wp-block-page-list) { 251 flex-wrap: nowrap; 252 } 253 254 .tn-nav--measured .wp-block-navigation__responsive-container:not(.is-menu-open) :is(.wp-block-navigation__container, .wp-block-page-list) { 255 flex-shrink: 0; 256 white-space: nowrap; 257 } 258 259 .wp-block-navigation.tn-nav--collapsed .wp-block-navigation__responsive-container-open:not(.always-shown) { 260 display: flex; 261 } 262 263 .wp-block-navigation.tn-nav--collapsed .wp-block-navigation__responsive-container:not(.is-menu-open) { 264 display: none; 265 } 266 267 /* 268 * Nút chuyển nền tối: mặc định là icon 44px nằm cạnh menu trên desktop. 269 * Nút chỉ hiện khi JavaScript chạy (html.tn-js); nhãn chữ hiện trong menu mobile. 270 */ 271 .tn-theme-toggle { 272 align-items: center; 273 background: transparent; 274 border: 1px solid var(--wp--preset--color--border); 275 border-radius: 999px; 276 color: var(--wp--preset--color--muted); 277 cursor: pointer; 278 display: none; 279 font: inherit; 280 gap: 0.35rem; 281 height: 44px; 282 justify-content: center; 283 margin-inline-start: 0.35rem; 284 min-width: 44px; 285 padding: 0; 286 transition: background-color 0.18s var(--tn-ease), border-color 0.18s var(--tn-ease), color 0.18s var(--tn-ease); 287 } 288 289 html.tn-js .tn-theme-toggle { 290 display: inline-flex; 291 } 292 293 .tn-theme-toggle:hover { 294 background: var(--wp--preset--color--surface); 295 color: var(--wp--preset--color--contrast); 296 } 297 298 .tn-theme-toggle:focus-visible { 299 outline: 2px solid var(--wp--preset--color--accent); 300 outline-offset: 2px; 301 } 302 303 .tn-theme-toggle__icon { 304 align-items: center; 305 display: inline-flex; 306 justify-content: center; 307 } 308 309 /* Ánh sáng: hiện mặt trăng (chuyển sang tối); nền tối: hiện mặt trời. */ 310 .tn-theme-toggle__icon--sun, 311 html[data-theme="dark"] .tn-theme-toggle__icon--moon { 312 display: none; 313 } 314 315 html[data-theme="dark"] .tn-theme-toggle__icon--sun { 316 display: inline-flex; 317 } 318 319 /* Nhãn chỉ dành cho trình đọc màn hình trên desktop. */ 320 .tn-theme-toggle__label { 321 clip-path: inset(50%); 322 height: 1px; 323 overflow: hidden; 324 position: absolute; 325 white-space: nowrap; 326 width: 1px; 327 } 328 329 /* Trong menu mobile: thành một dòng chữ lớn giống các mục menu. */ 330 .wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .tn-theme-toggle { 331 background: transparent; 332 border: 0; 333 border-radius: 0; 334 color: var(--wp--preset--color--contrast); 335 font-size: 1.5rem; 336 font-weight: 600; 337 gap: 0.6rem; 338 justify-content: flex-start; 339 margin-inline-start: 0; 340 min-height: 56px; 341 padding: 0; 342 width: 100%; 343 } 344 345 .wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .tn-theme-toggle:hover { 346 color: var(--wp--preset--color--accent); 347 } 348 349 .wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .tn-theme-toggle__label { 350 clip-path: none; 351 height: auto; 352 overflow: visible; 353 position: static; 354 white-space: normal; 355 width: auto; 356 } 357 358 .wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .tn-theme-toggle svg { 359 height: 24px; 360 width: 24px; 188 361 } 189 362 … … 263 436 264 437 .tn-search__panel { 438 box-sizing: border-box; 265 439 animation: tn-search-in 0.18s var(--tn-ease); 266 440 background: var(--wp--preset--color--base); … … 272 446 position: absolute; 273 447 right: 0; 274 top: calc(100% + 1.6rem);275 width: min(2 2rem, calc(100vw - 48px));448 top: calc(100% + 0.75rem); 449 width: min(25rem, calc(100vw - 48px)); 276 450 z-index: 5; 277 451 } 278 452 279 453 .tn-search__panel .wp-block-search__inside-wrapper { 454 align-items: center; 455 background: var(--wp--preset--color--surface); 456 border: var(--tn-hairline); 457 border-radius: 12px; 458 gap: 0.25rem; 280 459 max-width: none; 460 padding: 0.25rem; 461 } 462 463 .tn-search__panel .wp-block-search__inside-wrapper:focus-within { 464 border-color: var(--wp--preset--color--accent); 465 outline: 2px solid var(--wp--preset--color--accent); 466 outline-offset: 2px; 467 } 468 469 .tn-search__panel .wp-block-search__input { 470 background: transparent; 471 border: 0; 472 border-radius: 8px; 473 box-shadow: none; 474 flex: 1; 475 width: 100%; 476 } 477 478 .tn-search__panel .wp-block-search__input:focus-visible { 479 outline: none; 480 } 481 482 .tn-search__panel .wp-block-search__input::placeholder { 483 color: var(--wp--preset--color--muted); 484 opacity: 1; 485 } 486 487 .tn-search__panel .wp-block-search__button { 488 border-radius: 8px; 489 cursor: pointer; 490 } 491 492 .tn-search__panel .wp-block-search__button:focus-visible { 493 outline: 2px solid var(--wp--preset--color--contrast); 494 outline-offset: 2px; 281 495 } 282 496 … … 313 527 314 528 .tn-list-wide { 529 --tn-list-text-width: 820px; 315 530 margin-inline: auto; 316 531 width: min(820px, 100%); … … 341 556 line-height: 1.08; 342 557 margin-block: 0.15rem; 558 } 559 560 /* Nới khoảng cách meta → tiêu đề; 2 class để thắng blockGap của layout. */ 561 .tn-hero__body .tn-hero__title { 562 margin-block-start: var(--wp--preset--spacing--30); 343 563 } 344 564 … … 497 717 498 718 /* 499 * Home: mở rộng cả danh sách, cột meta rộng 320px, tiêu đề không bị thu hẹp.719 * Danh sách rộng: cột meta 12rem, phần còn lại dành cho tiêu đề. 500 720 * Dưới 1024px giữ cột meta 6.5rem để tiêu đề còn đủ chỗ. 501 721 */ 502 722 @media (min-width: 1024px) { 723 .tn-list-wide { 724 --tn-list-column-gap: clamp(2rem, 3vw, 2.75rem); 725 } 726 503 727 .tn-list-wide .tn-post-list .wp-block-post-template > li > .wp-block-group { 504 column-gap: clamp(2rem, 3vw, 2.75rem); 728 --tn-list-meta-width: 12rem; 729 column-gap: var(--tn-list-column-gap); 505 730 grid-template-columns: 12rem minmax(0, 1fr); 506 731 } … … 509 734 min-width: 0; 510 735 width: 100%; 736 } 737 } 738 739 .tn-list-wide, 740 .tn-post-list { 741 --tn-list-thumbnail-width: clamp(9rem, 20vw, 13rem); 742 } 743 744 /* Mobile: ảnh phía trên; desktop: ảnh ở cột phải khi có thumbnail. */ 745 746 .tn-post-list .wp-block-post-template > li > .wp-block-group > .tn-list__thumbnail { 747 grid-column: 1; 748 grid-row: 1; 749 width: 100%; 750 min-width: 0; 751 margin: 0 0 0.75rem; 752 aspect-ratio: 16 / 9; 753 } 754 755 .tn-list__thumbnail a { 756 display: block; 757 aspect-ratio: 16 / 9; 758 } 759 760 .tn-list__thumbnail img { 761 display: block; 762 width: 100%; 763 height: 100%; 764 aspect-ratio: 16 / 9; 765 object-fit: cover; 766 } 767 768 @media (min-width: 782px) { 769 /* Thêm chỗ cho ảnh, giữ nguyên ngân sách chiều rộng của phần chữ. */ 770 .tn-list-wide:has(.tn-list__thumbnail), 771 .is-layout-constrained > .tn-post-list:has(.tn-list__thumbnail) { 772 width: min(calc(var(--tn-list-text-width, var(--wp--style--global--content-size, 680px)) + var(--tn-list-thumbnail-width) + var(--tn-list-column-gap, clamp(1.5rem, 3vw, 2.5rem))), 100%); 773 max-width: var(--wp--style--global--wide-size, 1080px); 774 } 775 776 .tn-post-list:has(.tn-list__thumbnail) .wp-block-post-template > li > .wp-block-group:not(:has(> .tn-list__thumbnail)) { 777 max-width: min(var(--tn-list-text-width, var(--wp--style--global--content-size, 680px)), 100%); 778 } 779 780 .tn-post-list .wp-block-post-template > li > .wp-block-group:has(> .tn-list__thumbnail) { 781 grid-template-columns: var(--tn-list-meta-width, 6.5rem) minmax(0, 1fr) var(--tn-list-thumbnail-width); 782 } 783 784 .tn-post-list .wp-block-post-template > li > .wp-block-group > .tn-list__thumbnail { 785 grid-column: 3; 786 grid-row: 1 / span 2; 787 margin-bottom: 0; 511 788 } 512 789 } … … 559 836 letter-spacing: -0.03em; 560 837 line-height: 1.07; 561 margin-block: 0.35rem0.25rem;838 margin-block: var(--wp--preset--spacing--30) 0.25rem; 562 839 } 563 840 … … 626 903 627 904 /* Nội dung bài */ 905 /* Use the same containing width as the featured image; keep nested blocks inside their parent. */ 906 .tn-single .wp-block-post-content > .tn-cover-width, 907 .editor-styles-wrapper .tn-cover-width { 908 box-sizing: border-box; 909 width: 100% !important; 910 max-width: var(--wp--style--global--wide-size, 1080px) !important; 911 margin-inline: auto !important; 912 float: none; 913 } 914 915 :is(.tn-single .wp-block-post-content, .editor-styles-wrapper) .wp-block-image.tn-cover-width img { 916 width: 100% !important; 917 height: auto; 918 } 919 628 920 .tn-single .wp-block-post-content > p { 629 921 line-height: 1.72; … … 631 923 632 924 .tn-single .wp-block-post-content :where(h2) { 633 font-size: clamp(1. 6rem, 1.35rem + 0.7vw, 1.85rem);925 font-size: clamp(1.875rem, 1.65rem + 0.8vw, 2.25rem); 634 926 letter-spacing: -0.022em; 635 927 line-height: 1.25; … … 638 930 639 931 .tn-single .wp-block-post-content :where(h3) { 640 font-size: 1.3rem;932 font-size: clamp(1.5rem, 1.35rem + 0.5vw, 1.75rem); 641 933 letter-spacing: -0.015em; 642 934 margin-block-start: clamp(1.75rem, 3vw, 2.25rem); 935 } 936 937 .tn-single .wp-block-post-content :where(h4) { 938 font-size: clamp(1.25rem, 1.15rem + 0.35vw, 1.5rem); 939 line-height: 1.35; 643 940 } 644 941 … … 912 1209 913 1210 /* -------------------------------------------------------------------------- 1211 * Tùy chọn hiển thị (Appearance → Simple TN) 1212 * -------------------------------------------------------------------------- */ 1213 1214 .tn-hide-post-date .wp-block-post-date, 1215 .tn-hide-post-author .tn-byline, 1216 .tn-hide-post-author .wp-block-post-author, 1217 .tn-hide-post-author .wp-block-post-author-name { 1218 display: none; 1219 } 1220 1221 /* Ẩn ngày thì bỏ luôn dấu "·" phân cách trước chuyên mục trong cụm meta. */ 1222 .tn-hide-post-date .tn-meta .wp-block-post-terms::before { 1223 content: none; 1224 } 1225 1226 /* -------------------------------------------------------------------------- 914 1227 * Màn hình hẹp 915 1228 * -------------------------------------------------------------------------- */ 916 1229 917 1230 @media (max-width: 781px) { 1231 .tn-post-footer .wp-block-post-terms a, 1232 .tn-footer__bottom a { 1233 align-items: center; 1234 box-sizing: border-box; 1235 display: inline-flex; 1236 justify-content: center; 1237 min-height: 44px; 1238 min-width: 44px; 1239 } 1240 1241 .tn-meta .wp-block-post-terms a { 1242 min-width: 24px; 1243 } 1244 1245 .tn-post-footer .wp-block-post-terms a { 1246 max-width: 100%; 1247 } 1248 1249 .tn-post-nav .wp-block-post-navigation-link a { 1250 min-height: 44px; 1251 } 1252 918 1253 .tn-hero__media { 919 1254 border-radius: 12px; -
simple-tn/1.3.18/functions.php
r356199 r356992 18 18 require_once get_template_directory() . '/inc/content.php'; 19 19 require_once get_template_directory() . '/inc/search.php'; 20 require_once get_template_directory() . '/inc/settings.php'; 21 require_once get_template_directory() . '/inc/dark-mode.php'; 22 require_once get_template_directory() . '/inc/toc.php'; -
simple-tn/1.3.18/inc/query.php
r356199 r356992 67 67 68 68 /** 69 * Đưa link phân trang cũ về URL main query, không để tham số cũ lan sang link mới. 70 */ 71 function simple_tn_redirect_legacy_pagination() { 72 if ( ! isset( $_GET['query-0-page'] ) || is_admin() || is_feed() || is_preview() || ! ( is_home() || is_archive() || is_search() ) ) { 73 return; 74 } 75 76 $page = max( 1, (int) get_query_var( 'paged' ) ); 77 78 // Trang trong đường dẫn ưu tiên hơn tham số cũ; URL gốc lấy số trang cũ. 79 if ( 1 === $page && is_string( $_GET['query-0-page'] ) && ctype_digit( $_GET['query-0-page'] ) ) { 80 $page = max( 1, (int) $_GET['query-0-page'] ); 81 } 82 83 $url = remove_query_arg( 'query-0-page', get_pagenum_link( $page, false ) ); 84 wp_safe_redirect( $url, 301 ); 85 exit; 86 } 87 add_action( 'template_redirect', 'simple_tn_redirect_legacy_pagination', 5 ); 88 89 90 /** 69 91 * Truyền dấu nhận diện hero qua query context tới Post Template block. 70 92 * … … 125 147 126 148 /** 127 * Ảnh đại diện trên Home (hero)và đầu trang đọc bài.149 * Ảnh đại diện hero, danh sách, bài liên quan và đầu trang đọc bài. 128 150 * 129 151 * - sizes khai báo đúng kích thước hiển thị để trình duyệt chọn file vừa đủ. 130 * - Đây là ảnh LCP của trang: fetchpriority high, không lazy-load.131 * - Hero : link ảnh trùng đích với link tiêu đề ngay cạnh, nênẩn khỏi screen reader152 * - Hero và ảnh đầu bài là ảnh LCP: fetchpriority high, không lazy-load. 153 * - Hero/danh sách/bài liên quan: link ảnh trùng đích với tiêu đề, ẩn khỏi screen reader 132 154 * và thứ tự Tab để tên bài không bị đọc hai lần. Chuột và chạm vẫn bấm được. 133 155 * … … 139 161 $is_hero = simple_tn_block_has_class( $block, 'tn-hero__media' ); 140 162 $is_single = simple_tn_block_has_class( $block, 'tn-single__media' ); 141 142 if ( ! $is_hero && ! $is_single ) { 163 $is_card = simple_tn_block_has_class( $block, 'tn-list__thumbnail' ) || simple_tn_block_has_class( $block, 'tn-related__media' ); 164 165 if ( ! $is_hero && ! $is_single && ! $is_card ) { 143 166 return $block_content; 144 167 } … … 146 169 $processor = new WP_HTML_Tag_Processor( $block_content ); 147 170 148 if ( $is_hero&& $processor->next_tag( 'a' ) ) {171 if ( ( $is_hero || $is_card ) && $processor->next_tag( 'a' ) ) { 149 172 $processor->set_attribute( 'aria-hidden', 'true' ); 150 173 $processor->set_attribute( 'tabindex', '-1' ); 174 } 175 176 if ( $is_card ) { 177 return $processor->get_updated_html(); 151 178 } 152 179 -
simple-tn/1.3.18/inc/search.php
r356199 r356992 9 9 10 10 /** 11 * Chỉ trả về bài viếttrong kết quả tìm kiếm.11 * Trả về bài viết và trang trong kết quả tìm kiếm. 12 12 * 13 * Theme là blog, nên trang tĩnh và các post type khác không nằm trong kết quả.14 13 * Giữ nguyên hành vi trong admin và các query phụ. 15 14 * … … 24 23 * Loại nội dung xuất hiện trong kết quả tìm kiếm. 25 24 * 26 * @param string[] $post_types Mặc định chỉ bài viết.25 * @param string[] $post_types Mặc định gồm bài viết và trang. 27 26 */ 28 $post_types = (array) apply_filters( 'simple_tn_search_post_types', array( 'post' ) );27 $post_types = (array) apply_filters( 'simple_tn_search_post_types', array( 'post', 'page' ) ); 29 28 30 29 $query->set( 'post_type', $post_types ); … … 50 49 51 50 if ( $processor->next_tag( array( 'tag_name' => 'form' ) ) ) { 52 $processor->set_attribute( 'aria-label', __( 'Tìm bài viết', 'simple-tn' ) );51 $processor->set_attribute( 'aria-label', __( 'Tìm kiếm', 'simple-tn' ) ); 53 52 } 54 53 -
simple-tn/1.3.18/inc/setup.php
r356199 r356992 16 16 add_theme_support( 'post-thumbnails' ); 17 17 add_theme_support( 'responsive-embeds' ); 18 add_theme_support( 'align-wide' ); 18 19 19 20 // CSS bố cục cấp trang: hiển thị trong editor để bản xem trước khớp frontend. … … 24 25 } 25 26 add_action( 'after_setup_theme', 'simple_tn_setup' ); 27 28 /** Add an explicit cover-width switch to the block inspector. */ 29 function simple_tn_enqueue_block_width_editor() { 30 wp_enqueue_script( 31 'simple-tn-block-width', 32 get_template_directory_uri() . '/assets/js/block-width.js', 33 array( 'wp-hooks', 'wp-element', 'wp-block-editor', 'wp-components', 'wp-i18n' ), 34 SIMPLE_TN_VERSION, 35 true 36 ); 37 } 38 add_action( 'enqueue_block_editor_assets', 'simple_tn_enqueue_block_width_editor' ); 26 39 27 40 /** … … 95 108 } 96 109 add_action( 'wp_enqueue_scripts', 'simple_tn_enqueue_theme_styles', 20 ); 110 111 /** Keep header navigation on one row, using the core overlay when space runs out. */ 112 function simple_tn_enqueue_header_script() { 113 wp_enqueue_script( 'simple-tn-header', get_template_directory_uri() . '/assets/js/header.js', array(), SIMPLE_TN_VERSION, true ); 114 } 115 add_action( 'wp_enqueue_scripts', 'simple_tn_enqueue_header_script' ); -
simple-tn/1.3.18/languages/simple-tn.pot
r356199 r356992 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Simple TN 1. 2.9\n"5 "Project-Id-Version: Simple TN 1.3.2\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/theme/simple-tn\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-10- 29T15:54:25+00:00\n"12 "POT-Creation-Date: 2026-10-30T00:10:58+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 17 17 #. Theme Name of the theme 18 18 #: style.css 19 #: inc/settings.php:176 19 20 #: inc/setup.php:34 20 21 msgid "Simple TN" … … 23 24 #. Description of the theme 24 25 #: style.css 25 msgid "Block theme tối giản cho blog cá nhân. Mobile-first, tập trung vào trải nghiệm đọc, không sidebar, không JavaScript từ theme. Màu, font, menu và footer chỉnh được trong Site Editor."26 msgid "Block theme tối giản cho blog cá nhân. Mobile-first, tập trung vào trải nghiệm đọc, không sidebar, JavaScript tối thiểu cho nút chuyển nền tối. Màu, font, menu và footer chỉnh được trong Site Editor; bật/tắt ngày, tác giả, nền tối và chọn menu nhanh trong Giao diện > Simple TN." 26 27 msgstr "" 27 28 … … 36 37 msgstr "" 37 38 38 #: inc/search.php:52 39 #: inc/dark-mode.php:61 40 msgid "Chuyển sang nền tối" 41 msgstr "" 42 43 #: inc/dark-mode.php:62 44 msgid "Chuyển sang nền sáng" 45 msgstr "" 46 47 #: inc/dark-mode.php:63 48 #: inc/settings.php:234 49 msgid "Nền tối" 50 msgstr "" 51 52 #: inc/dark-mode.php:64 53 msgid "Nền sáng" 54 msgstr "" 55 56 #: inc/search.php:51 57 #: inc/search.php:73 39 58 #: patterns/404-content.php:24 40 59 #: patterns/header-default.php:34 41 60 #: patterns/search-header.php:17 42 msgid "Tìm bài viết"43 msgstr ""44 45 #: inc/search.php:7446 61 msgid "Tìm kiếm" 62 msgstr "" 63 64 #: inc/settings.php:21 65 msgid "Tối mặc định" 66 msgstr "" 67 68 #: inc/settings.php:33 69 msgid "Tối ấm" 70 msgstr "" 71 72 #: inc/settings.php:175 73 msgid "Cài đặt Simple TN" 74 msgstr "" 75 76 #: inc/settings.php:201 77 msgid "Hiển thị bài viết" 78 msgstr "" 79 80 #: inc/settings.php:208 81 msgid "Ngày đăng" 82 msgstr "" 83 84 #: inc/settings.php:214 85 msgid "Hiện ngày đăng của bài viết" 86 msgstr "" 87 88 #: inc/settings.php:215 89 msgid "Áp dụng cho danh sách bài, bài đơn và bài viết liên quan." 90 msgstr "" 91 92 #: inc/settings.php:221 93 msgid "Tác giả" 94 msgstr "" 95 96 #: inc/settings.php:227 97 msgid "Hiện tên tác giả" 98 msgstr "" 99 100 #: inc/settings.php:228 101 msgid "Ẩn dòng “Bởi …” ở đầu bài viết." 102 msgstr "" 103 104 #: inc/settings.php:241 105 msgid "Nút chuyển nền tối" 106 msgstr "" 107 108 #: inc/settings.php:247 109 msgid "Hiện nút chuyển nền sáng/tối" 110 msgstr "" 111 112 #: inc/settings.php:248 113 msgid "Tắt để ẩn nút và luôn dùng bảng màu sáng đang chọn." 114 msgstr "" 115 116 #: inc/settings.php:254 117 msgid "Bảng màu tối" 118 msgstr "" 119 120 #: inc/settings.php:262 121 msgid "Menu header và footer" 122 msgstr "" 123 124 #: inc/settings.php:269 125 msgid "Menu header" 126 msgstr "" 127 128 #: inc/settings.php:280 129 msgid "Menu footer" 130 msgstr "" 131 132 #: inc/settings.php:295 133 msgid "Bật/tắt nhanh các thành phần hiển thị trên toàn site." 134 msgstr "" 135 136 #: inc/settings.php:302 137 msgid "Nút chuyển nền sáng/tối nằm trong menu header. Trên mobile, nút nằm trong menu mở." 138 msgstr "" 139 140 #: inc/settings.php:303 141 msgid "Mặc định theo cài đặt hệ thống của khách; lựa chọn được lưu trong trình duyệt, không gửi đi đâu." 142 msgstr "" 143 144 #: inc/settings.php:304 145 msgid "Bảng màu sáng chỉnh trong Site Editor → Styles. Bảng màu tối chỉnh riêng bên dưới để không ảnh hưởng giao diện sáng." 146 msgstr "" 147 148 #: inc/settings.php:325 149 msgid "Nền" 150 msgstr "" 151 152 #: inc/settings.php:326 153 msgid "Nền phụ" 154 msgstr "" 155 156 #: inc/settings.php:327 157 msgid "Chữ chính" 158 msgstr "" 159 160 #: inc/settings.php:328 161 msgid "Chữ phụ" 162 msgstr "" 163 164 #: inc/settings.php:329 165 msgid "Đường kẻ" 166 msgstr "" 167 168 #: inc/settings.php:330 169 msgid "Màu nhấn" 170 msgstr "" 171 172 #: inc/settings.php:331 173 msgid "Chữ trên nền nhấn" 174 msgstr "" 175 176 #: inc/settings.php:336 177 msgid "Bộ màu có sẵn" 178 msgstr "" 179 180 #: inc/settings.php:338 181 msgid "Tùy chỉnh" 182 msgstr "" 183 184 #: inc/settings.php:346 185 msgid "Chọn bộ màu để điền nhanh 7 ô bên dưới, sau đó bấm Lưu thay đổi. Có thể chỉnh từng ô." 186 msgstr "" 187 188 #: inc/settings.php:362 189 msgid "Màu tối chỉ áp dụng khi khách bật nền tối; bảng màu sáng vẫn chỉnh trong Site Editor → Styles." 190 msgstr "" 191 192 #: inc/settings.php:415 193 msgid "Chọn menu đã tạo trong Site Editor → Navigation." 194 msgstr "" 195 196 #: inc/settings.php:416 197 msgid "“Theo Site Editor” giữ nguyên thiết lập của Navigation block; chọn một menu cụ thể thì menu đó được dùng thay cho thiết lập của block." 198 msgstr "" 199 200 #: inc/settings.php:417 201 msgid "Tùy chọn chỉ áp dụng cho Navigation block của theme và có hiệu lực khi khách xem site. Nếu bạn đã thay bằng block khác, hãy chọn menu trực tiếp trong Site Editor." 202 msgstr "" 203 204 #: inc/settings.php:486 205 msgid "Theo Site Editor (mặc định)" 206 msgstr "" 207 208 #. translators: %d: menu ID. 209 #: inc/settings.php:494 210 #, php-format 211 msgid "Menu #%d" 212 msgstr "" 213 214 #: inc/settings.php:503 215 msgid "Đang dùng menu này thay cho thiết lập của Navigation block trong Site Editor." 216 msgstr "" 217 218 #: inc/settings.php:507 219 msgid "Chưa có menu nào. Tạo menu trong Site Editor → Navigation." 220 msgstr "" 221 222 #: inc/settings.php:508 223 msgid "Mở Site Editor" 47 224 msgstr "" 48 225 … … 298 475 299 476 #: patterns/search-results.php:34 300 msgid "Không tìm thấy bài viếtphù hợp. Thử một từ khóa ngắn hơn hoặc khác đi."301 msgstr "" 302 303 #: theme.json477 msgid "Không tìm thấy nội dung phù hợp. Thử một từ khóa ngắn hơn hoặc khác đi." 478 msgstr "" 479 480 #: .json 304 481 msgctxt "Border radius size name" 305 482 msgid "Small" 306 483 msgstr "" 307 484 308 #: theme.json485 #: .json 309 486 msgctxt "Border radius size name" 310 487 msgid "Medium" 311 488 msgstr "" 312 489 313 #: theme.json490 #: .json 314 491 msgctxt "Border radius size name" 315 492 msgid "Large" 316 493 msgstr "" 317 494 318 #: theme.json495 #: .json 319 496 #: styles/warm.json 320 497 msgctxt "Color name" … … 322 499 msgstr "" 323 500 324 #: theme.json501 #: .json 325 502 #: styles/warm.json 326 503 msgctxt "Color name" … … 328 505 msgstr "" 329 506 330 #: theme.json507 #: .json 331 508 #: styles/warm.json 332 509 msgctxt "Color name" … … 334 511 msgstr "" 335 512 336 #: theme.json513 #: .json 337 514 #: styles/warm.json 338 515 msgctxt "Color name" … … 340 517 msgstr "" 341 518 342 #: theme.json519 #: .json 343 520 #: styles/warm.json 344 521 msgctxt "Color name" … … 346 523 msgstr "" 347 524 348 #: theme.json525 #: .json 349 526 #: styles/warm.json 350 527 msgctxt "Color name" … … 352 529 msgstr "" 353 530 354 #: theme.json531 #: .json 355 532 #: styles/warm.json 356 533 msgctxt "Color name" … … 358 535 msgstr "" 359 536 360 #: theme.json537 #: .json 361 538 msgctxt "Space size name" 362 539 msgid "2X-Small" 363 540 msgstr "" 364 541 365 #: theme.json542 #: .json 366 543 msgctxt "Space size name" 367 544 msgid "X-Small" 368 545 msgstr "" 369 546 370 #: theme.json547 #: .json 371 548 msgctxt "Space size name" 372 549 msgid "Small" 373 550 msgstr "" 374 551 375 #: theme.json552 #: .json 376 553 msgctxt "Space size name" 377 554 msgid "Medium" 378 555 msgstr "" 379 556 380 #: theme.json557 #: .json 381 558 msgctxt "Space size name" 382 559 msgid "Large" 383 560 msgstr "" 384 561 385 #: theme.json562 #: .json 386 563 msgctxt "Space size name" 387 564 msgid "X-Large" 388 565 msgstr "" 389 566 390 #: theme.json567 #: .json 391 568 msgctxt "Space size name" 392 569 msgid "2X-Large" 393 570 msgstr "" 394 571 395 #: theme.json572 #: .json 396 573 msgctxt "Font family name" 397 574 msgid "Literata" 398 575 msgstr "" 399 576 400 #: theme.json577 #: .json 401 578 msgctxt "Font family name" 402 579 msgid "Be Vietnam Pro" 403 580 msgstr "" 404 581 405 #: theme.json582 #: .json 406 583 msgctxt "Font family name" 407 584 msgid "Monospace" 408 585 msgstr "" 409 586 410 #: theme.json587 #: .json 411 588 msgctxt "Font size name" 412 589 msgid "X-Small" 413 590 msgstr "" 414 591 415 #: theme.json592 #: .json 416 593 msgctxt "Font size name" 417 594 msgid "Small" 418 595 msgstr "" 419 596 420 #: theme.json597 #: .json 421 598 msgctxt "Font size name" 422 599 msgid "Medium" 423 600 msgstr "" 424 601 425 #: theme.json602 #: .json 426 603 msgctxt "Font size name" 427 604 msgid "Large" 428 605 msgstr "" 429 606 430 #: theme.json607 #: .json 431 608 msgctxt "Font size name" 432 609 msgid "X-Large" 433 610 msgstr "" 434 611 435 #: theme.json612 #: .json 436 613 msgctxt "Font size name" 437 614 msgid "2X-Large" 438 615 msgstr "" 439 616 440 #: theme.json617 #: .json 441 618 msgctxt "Font size name" 442 619 msgid "Huge" 443 620 msgstr "" 444 621 445 #: theme.json622 #: .json 446 623 msgctxt "Custom template name" 447 624 msgid "Bài viết không ảnh đầu" 448 625 msgstr "" 449 626 450 #: theme.json627 #: .json 451 628 msgctxt "Template part name" 452 629 msgid "Header" 453 630 msgstr "" 454 631 455 #: theme.json632 #: .json 456 633 msgctxt "Template part name" 457 634 msgid "Footer" 458 635 msgstr "" 459 636 460 #: theme.json637 #: .json 461 638 msgctxt "Template part name" 462 639 msgid "Post meta" -
simple-tn/1.3.18/patterns/404-content.php
r356199 r356992 22 22 <!-- /wp:paragraph --> 23 23 24 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm bài viết', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true} /-->24 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm kiếm', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true} /--> 25 25 26 26 <!-- wp:paragraph --> -
simple-tn/1.3.18/patterns/footer-default.php
r356199 r356992 31 31 <!-- /wp:group --> 32 32 33 <!-- wp:navigation {" ariaLabel":"<?php echo esc_attr__( 'Menu chân trang', 'simple-tn' ); ?>","overlayMenu":"never","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","flexWrap":"wrap"}} /-->33 <!-- wp:navigation {"className":"tn-nav--footer","ariaLabel":"<?php echo esc_attr__( 'Menu chân trang', 'simple-tn' ); ?>","overlayMenu":"never","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","flexWrap":"wrap"}} /--> 34 34 </div> 35 35 <!-- /wp:group --> -
simple-tn/1.3.18/patterns/header-centered.php
r356199 r356992 17 17 <!-- wp:site-logo {"width":40,"shouldSyncIcon":false,"align":"center"} /--> 18 18 <!-- wp:site-title {"level":0,"textAlign":"center","style":{"typography":{"fontSize":"var:preset|font-size|large"}}} /--> 19 <!-- wp:navigation {" ariaLabel":"<?php echo esc_attr__( 'Menu chính', 'simple-tn' ); ?>","overlayMenu":"mobile","overlayBackgroundColor":"base","overlayTextColor":"contrast","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","justifyContent":"center"}} /-->19 <!-- wp:navigation {"className":"tn-nav--header","ariaLabel":"<?php echo esc_attr__( 'Menu chính', 'simple-tn' ); ?>","overlayMenu":"mobile","overlayBackgroundColor":"base","overlayTextColor":"contrast","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","justifyContent":"center"}} /--> 20 20 </header> 21 21 <!-- /wp:group --> -
simple-tn/1.3.18/patterns/header-default.php
r356199 r356992 26 26 <!-- wp:group {"className":"tn-header__actions","style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"flex","flexWrap":"nowrap","verticalAlignment":"center"}} --> 27 27 <div class="wp-block-group tn-header__actions"> 28 <!-- wp:navigation {" ariaLabel":"<?php echo esc_attr__( 'Menu chính', 'simple-tn' ); ?>","overlayMenu":"mobile","overlayBackgroundColor":"base","overlayTextColor":"contrast","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","justifyContent":"right"}} /-->28 <!-- wp:navigation {"className":"tn-nav--header","ariaLabel":"<?php echo esc_attr__( 'Menu chính', 'simple-tn' ); ?>","overlayMenu":"mobile","overlayBackgroundColor":"base","overlayTextColor":"contrast","style":{"spacing":{"blockGap":"var:preset|spacing|30"}},"layout":{"type":"flex","justifyContent":"right"}} /--> 29 29 30 30 <!-- wp:details {"summary":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","className":"tn-search"} --> … … 32 32 <!-- wp:group {"className":"tn-search__panel","layout":{"type":"default"}} --> 33 33 <div class="wp-block-group tn-search__panel"> 34 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm bài viết', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true,"className":"tn-search__form"} /-->34 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm kiếm', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true,"className":"tn-search__form"} /--> 35 35 </div> 36 36 <!-- /wp:group --> -
simple-tn/1.3.18/patterns/hero-latest-post.php
r356199 r356992 17 17 <!-- wp:group {"className":"tn-hero__inner","layout":{"type":"default"}} --> 18 18 <div class="wp-block-group tn-hero__inner"> 19 <!-- wp:post-featured-image {"isLink":true,"aspectRatio":" 3/2","sizeSlug":"large","className":"tn-hero__media"} /-->19 <!-- wp:post-featured-image {"isLink":true,"aspectRatio":"16/9","sizeSlug":"large","className":"tn-hero__media"} /--> 20 20 21 21 <!-- wp:group {"className":"tn-hero__body","style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"default"}} --> -
simple-tn/1.3.18/patterns/post-list.php
r356199 r356992 4 4 * Slug: simple-tn/post-list 5 5 * Categories: simple-tn, query 6 * Description: Danh sách bài theo main query (Home, archive, search), chỉ có chữ, kèm pagination.6 * Description: Danh sách bài theo main query (Home, archive, search), thumbnail tùy chọn, kèm pagination. 7 7 * Viewport Width: 1280 8 8 * … … 20 20 <!-- wp:post-title {"isLink":true,"level":2,"fontSize":"x-large"} /--> 21 21 <!-- wp:post-excerpt {"excerptLength":24,"className":"tn-excerpt","textColor":"muted","fontSize":"small","style":{"typography":{"lineHeight":"1.6"}}} /--> 22 <!-- wp:post-featured-image {"isLink":true,"aspectRatio":"16/9","sizeSlug":"medium_large","className":"tn-list__thumbnail"} /--> 23 22 24 </div> 23 25 <!-- /wp:group --> -
simple-tn/1.3.18/patterns/search-header.php
r356199 r356992 15 15 <div class="wp-block-group" style="margin-bottom:var(--wp--preset--spacing--40)"> 16 16 <!-- wp:query-title {"type":"search","level":1} /--> 17 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm bài viết', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true} /-->17 <!-- wp:search {"label":"<?php echo esc_attr__( 'Tìm kiếm', 'simple-tn' ); ?>","showLabel":false,"placeholder":"<?php echo esc_attr__( 'Nhập từ khóa', 'simple-tn' ); ?>","buttonText":"<?php echo esc_attr__( 'Tìm', 'simple-tn' ); ?>","buttonUseIcon":true} /--> 18 18 </div> 19 19 <!-- /wp:group --> -
simple-tn/1.3.18/patterns/search-results.php
r356199 r356992 20 20 <!-- wp:post-title {"isLink":true,"level":2,"fontSize":"x-large"} /--> 21 21 <!-- wp:post-excerpt {"excerptLength":24,"className":"tn-excerpt","textColor":"muted","fontSize":"small","style":{"typography":{"lineHeight":"1.6"}}} /--> 22 <!-- wp:post-featured-image {"isLink":true,"aspectRatio":"16/9","sizeSlug":"medium_large","className":"tn-list__thumbnail"} /--> 23 22 24 </div> 23 25 <!-- /wp:group --> … … 32 34 <!-- wp:query-no-results --> 33 35 <!-- wp:paragraph --> 34 <p><?php esc_html_e( 'Không tìm thấy bài viếtphù hợp. Thử một từ khóa ngắn hơn hoặc khác đi.', 'simple-tn' ); ?></p>36 <p><?php esc_html_e( 'Không tìm thấy nội dung phù hợp. Thử một từ khóa ngắn hơn hoặc khác đi.', 'simple-tn' ); ?></p> 35 37 <!-- /wp:paragraph --> 36 38 <!-- /wp:query-no-results --> -
simple-tn/1.3.18/readme.txt
r356199 r356992 7 7 License URI: https://www.gnu.org/licenses/gpl-2.0.html 8 8 9 Block theme tối giản cho blog cá nhân: một cột, không sidebar, không JavaScript riêng, tối ưu cho việc đọc.9 Block theme tối giản cho blog cá nhân: một cột, không sidebar, JavaScript tối thiểu cho chuyển nền tối, menu thích ứng và mục lục, tối ưu cho việc đọc. 10 10 11 11 == Description == 12 12 13 Simple TN là block theme cho blog cá nhân. Giao diện một cột, không sidebar, tập trung vào trải nghiệm đọc; không có JavaScript riêng từ theme.13 Simple TN là block theme cho blog cá nhân. Giao diện một cột, không sidebar, tập trung vào trải nghiệm đọc; JavaScript nhỏ cho nút chuyển nền tối, thu gọn menu khi không đủ chỗ và mục lục bài viết. 14 14 15 15 Tính năng: 16 16 17 * Home: hero bài mới nhất, danh sách bài và pagination dùng chung khung 820px với archive và search. 18 * Header dính trên cùng, menu mobile dùng Navigation block của WordPress core; panel tìm kiếm mở bằng thẻ details, không cần JavaScript. 17 * Home: hero bài mới nhất với ảnh tỷ lệ 16:9, danh sách bài và pagination dùng chung khung 820px với archive và search; desktop tự mở rộng thêm chỗ cho thumbnail khi có ảnh. 18 * Link phân trang cũ `query-0-page` tự chuyển 301 về URL main query sạch; giữ trang hiện tại trong đường dẫn và các tham số tìm kiếm/chuyên mục. 19 * Header dính trên cùng, menu mobile dùng Navigation block của WordPress core; panel tìm kiếm dùng thẻ details, tự focus ô nhập khi mở và hỗ trợ phím Esc. 20 * Heading nội dung bài: H2 30–36px, H3 24–28px, H4 20–24px (theo màn hình, với cỡ chữ gốc 16px). 19 21 * Trang đọc: H1 rộng, dòng tác giả, ảnh đầu bài, điều hướng bài trước/sau và 6 bài liên quan cùng chuyên mục. 22 * Mục lục bài viết tự động từ H3, mặc định hiển thị khi có ít nhất 4 H3; H4 có thể bật để hiển thị lồng bên dưới H3. Giữ ID tác giả, hỗ trợ slug tiếng Việt và heading trùng tên; mobile mặc định thu gọn. 20 23 * Bình luận không avatar, form bình luận và phân trang bình luận. 21 * 2 style variation: mặc định và "Ấm"; màu, font, cỡ chữ, khoảng cách chỉnh trong Site Editor. 24 * 8 bộ màu sáng/tối: Mặc định, Ấm, Đại dương, Rừng, Oải hương, Đất nung, Hoa hồng và Đá phiến. Chọn trong Site Editor → Styles; màu, font, cỡ chữ, khoảng cách vẫn chỉnh được. 25 * Nền tối: nút chuyển nền sáng/tối trong menu header; trên mobile nằm trong menu mở. Theo cài đặt hệ thống của khách và lưu lựa chọn trong trình duyệt. 26 * Màu tối mặc định tự theo style variation đã lưu; tắt “Màu tối theo style” trong Giao diện > Simple TN để dùng màu tối riêng. Bảng màu tối tùy chỉnh từ bản cũ được giữ nguyên. 27 * 2 bộ màu tối thủ công có sẵn: "Tối mặc định" (trung tính) và "Tối ấm" (nền nâu ấm, nhấn hồng), chọn nhanh trong Giao diện > Simple TN; vẫn chỉnh được từng màu. 22 28 * 15 pattern, 8 template và 3 template part; không custom post type, shortcode hay custom block. 23 * Không JavaScript riêng, không thư viện ngoài; font Literata và Be Vietnam Pro tự host. 29 * Trang cài đặt có 2 tab Cài đặt và README. Tab Cài đặt giữ 4 nhóm Header & menu, Bài viết, Table of Contents, Màu sắc & nền tối; responsive và bảng màu tùy chỉnh thu gọn. Tab README hiển thị tài liệu đầy đủ từ file đi kèm theme. 30 * Trang cài đặt Giao diện > Simple TN: cấu hình mục lục, bật/tắt logo header (giữ tên website), thumbnail danh sách bài, ngày đăng, tên tác giả, nút chuyển nền tối, chỉnh 7 màu nền tối và chọn menu header/footer nhanh. 31 * Thumbnail danh sách nằm bên phải trên desktop, phía trên phần chữ trên mobile (dưới 782px), tỷ lệ 16:9, dùng ảnh đại diện bài viết; áp dụng cho Home, chuyên mục, tag, tác giả, lưu trữ và tìm kiếm. Mặc định tắt; bài không có ảnh vẫn chỉ hiện chữ. 32 * Table block dùng auto layout theo nội dung khi tắt “Cố định chiều dài ô”; bảng thiếu chỗ sẽ cuộn ngang thay vì bẻ từ thành từng ký tự. Giữ nguyên fixed layout của WordPress khi bật tùy chọn này. 33 * Block có hỗ trợ chiều rộng có thể mở rộng bằng ảnh cover trong sidebar Block → Chiều rộng; hỗ trợ cả Table, Image và Gallery. 34 * Tìm kiếm cả bài viết và trang; panel trên header tự focus ô nhập khi mở, Esc đóng panel và trả focus về nút tìm kiếm. 35 * Không thư viện ngoài; font Literata và Be Vietnam Pro tự host. 24 36 25 37 Yêu cầu: … … 30 42 Bố cục: 31 43 32 * Home, category, tag, author, date và search dùng chung khung danh sách 820px.44 * Home, category, tag, author, date và search dùng chung khung chữ 820px; khi có thumbnail desktop, danh sách rộng thêm phần ảnh và khoảng cách, tối đa theo màn hình. Cột meta và tiêu đề giữ độ rộng cũ khi đủ chỗ. 33 45 * Trang đọc dùng cột nội dung 680px; ảnh đầu bài rộng tối đa 1080px. 34 * Mobile một cột , không tràn ngang ở 320px.46 * Mobile một cột; nội dung rộng như bảng và code cuộn trong khung riêng thay vì làm tràn ngang toàn trang ở 320px. 35 47 36 48 == Installation == … … 41 53 4. Vào Cài đặt > Đọc để đặt số bài mỗi trang cho Home. 42 54 5. Tạo menu trong Giao diện > Trình chỉnh sửa > Navigation. 55 6. Vào Giao diện > Simple TN > Cài đặt để chỉnh 4 nhóm Header & menu, Bài viết, Table of Contents, Màu sắc & nền tối; bấm Lưu thay đổi. 56 7. Mở tab README trên cùng trang để đọc hướng dẫn và changelog đúng với bản đang cài. Tab này chỉ đọc, không có nút lưu cài đặt. 57 8. Chọn và lưu một bộ màu trong Giao diện > Trình chỉnh sửa > Styles > Browse styles. Màu tối tự theo style khi bật “Màu tối theo style”. 43 58 44 59 == Frequently Asked Questions == 45 60 46 = Làm sao đổi giữa giao diện mặc định và "Ấm"? = 47 Giao diện > Trình chỉnh sửa > Styles > Browse styles, chọn "Ấm". 61 = Đọc tài liệu của bản theme đang cài ở đâu? = 62 Vào Giao diện > Simple TN > README. Tab đọc trực tiếp readme.txt đi kèm theme, gồm toàn bộ hướng dẫn, FAQ, changelog, lưu ý nâng cấp và tài nguyên/giấy phép. Không cần Internet hoặc plugin đọc Markdown; văn bản tự xuống dòng trên mobile. 63 Chỉ tài khoản có quyền chỉnh giao diện (edit_theme_options) mới xem được trang này. Chuyển về tab Cài đặt để chỉnh và lưu tùy chọn; tab README không chứa form lưu hoặc color picker. Nếu file tài liệu thiếu/không đọc được, trang hiển thị thông báo thay vì lỗi PHP. 64 65 = Làm sao chọn một trong 8 bộ màu? = 66 Giao diện > Trình chỉnh sửa > Styles > Browse styles, chọn Mặc định, Ấm, Đại dương, Rừng, Oải hương, Đất nung, Hoa hồng hoặc Đá phiến, rồi lưu. Các variation đổi màu, giữ font và bố cục của theme. Nếu đã chỉnh bảng màu thủ công trong Site Editor, kiểm tra lại các màu tùy chỉnh sau khi đổi style. 48 67 49 68 = Làm sao đổi màu, font, cỡ chữ, khoảng cách? = … … 51 70 52 71 = Làm sao đổi menu? = 53 Giao diện > Trình chỉnh sửa > Navigation. Nếu đang dùng menu cổ điển, chọn Import trong block Navigation. 72 Cách nhanh: Giao diện > Simple TN, chọn menu cho header và footer. 73 Chi tiết: Giao diện > Trình chỉnh sửa > Navigation. Nếu đang dùng menu cổ điển, chọn Import trong block Navigation. 74 75 = Làm sao ẩn logo và chỉ giữ tên website? = 76 Giao diện > Simple TN > Header & menu, bỏ chọn “Hiện logo trên header” rồi lưu. Logo trong template part header bị ẩn; tên website vẫn hiển thị nếu còn block Site Title. 77 78 = Làm sao bật ảnh trong danh sách bài? = 79 Giao diện > Simple TN > Bài viết, bật “Hiện ảnh đại diện bên phải mỗi bài viết” rồi lưu. Ảnh lấy từ Featured Image của từng bài, tỷ lệ 16:9; mặc định tùy chọn này tắt. 80 Trên desktop (từ 782px), ảnh nằm bên phải; danh sách rộng thêm phần ảnh và khoảng cách, giữ độ rộng meta/tiêu đề khi màn hình đủ chỗ. Dưới 782px, ảnh nằm phía trên phần chữ và rộng toàn hàng, giống hero. Bài không có ảnh chỉ hiện chữ. 81 Áp dụng cho Home, chuyên mục, tag, tác giả, lưu trữ và tìm kiếm. Tùy chọn này không tắt ảnh hero hoặc ảnh đầu bài viết. 82 83 = Làm sao bật hoặc tắt mục lục bài viết? = 84 Giao diện > Simple TN > Table of Contents. Có bốn tùy chọn: 85 * Hiển thị mục lục bài viết: mặc định bật. Tắt sẽ ngừng xử lý mục lục, không thêm anchor và không tải CSS/JavaScript riêng của TOC. 86 * Số heading tối thiểu: mặc định 4, nhận giá trị từ 2 đến 10; chỉ đếm H3. 87 * Hiển thị heading cấp H4: mặc định tắt. Khi bật, H4 nằm bên dưới H3 cha; không dùng H5/H6. 88 * Thu gọn mục lục trên mobile: mặc định bật dưới 782px; desktop mở sẵn. Có thể mở/đóng bằng chuột, chạm hoặc bàn phím. 89 Mục lục chỉ xuất hiện trong nội dung bài đơn chính, trước H2/H3 đầu tiên và sau phần mở đầu nếu có. Không đưa H1/H2 vào danh sách, không xuất hiện trên page, archive, tìm kiếm, excerpt, feed hoặc bài đang khóa mật khẩu. Không thay đổi nội dung trong database hay permalink. 90 Anchor có sẵn được giữ nguyên. Các ID thủ công bị trùng hoặc không hợp lệ được bỏ khỏi danh sách; nếu còn ít H3 hợp lệ hơn ngưỡng đã đặt thì không hiển thị mục lục. Heading chưa có ID được tạo slug tiếng Việt và thêm hậu tố khi cần. 91 Link mục lục dùng anchor HTML thật, hỗ trợ URL hash/back/forward, cuộn mượt và reduced motion. Khi tắt JavaScript, mục lục mở sẵn và vẫn có thể đóng/mở bằng details gốc của trình duyệt. 92 93 = Làm sao ẩn ngày đăng hoặc tên tác giả? = 94 Giao diện > Simple TN, bỏ chọn "Hiện ngày đăng của bài viết" hoặc "Hiện tên tác giả". Tùy chọn áp dụng cho danh sách bài, bài đơn và bài viết liên quan. 95 96 = Làm sao đổi màu nền tối? = 97 Mặc định, Giao diện > Simple TN > Màu sắc & nền tối bật “Màu tối theo style”: mỗi bộ màu sáng có bảng màu tối tương ứng. Hãy lưu style đang chọn trong Site Editor. 98 Để dùng màu riêng, bỏ chọn “Màu tối theo style”, mở “Chỉnh bảng màu tối riêng”, chọn preset “Tối mặc định” hoặc “Tối ấm”, hoặc chỉnh 7 ô màu bằng color picker của WordPress, rồi lưu. Phần màu thủ công vẫn được lưu khi đang thu gọn hoặc dùng chế độ tự động. 99 Bảng màu tối tùy chỉnh từ các phiên bản cũ được giữ ở chế độ thủ công; cài đặt màu tối mặc định chuyển sang tự theo style. Bỏ chọn “Hiện nút chuyển nền sáng/tối” để ẩn nút và luôn dùng bảng màu sáng. 54 100 55 101 = Làm sao đổi header hoặc footer? = … … 65 111 3. Bài có excerpt viết tay chỉ gồm khoảng trắng sẽ hiển thị trống; xoá trắng ô Excerpt. 66 112 67 = Làm sao cập nhật từ 1.0.1? = 68 1. Sao lưu và thử trên staging. 69 2. Cài theme mới; xoá cache của plugin cache/CDN. 70 3. Nếu Header, Archive, Search hoặc Single đã tùy chỉnh trong Site Editor, reset template/template part để nhận search ở header, khung 820px và related 6 bài. 71 4. Kiểm tra menu, trang chủ, một category, một trang search và một bài viết. 113 = Table block phân bổ chiều rộng cột như thế nào? = 114 Khi tắt “Cố định chiều dài ô” trong cài đặt Table block, bảng dùng auto layout, rộng 100% khung chứa khi đủ chỗ. Browser phân bổ cột theo nội dung; theme không chia đều cột, không đo nội dung bằng JavaScript và không giả định cột đầu là tiêu đề. Không cần đặt width cho từng cột. 115 Khi bật tùy chọn, class .has-fixed-layout trên table giữ nguyên fixed layout của WordPress; các cột có thể chia đều nếu chưa đặt chiều rộng. Theme không tự chuyển bảng đã bật fixed sang auto. 116 117 = Vì sao bảng cuộn ngang trên điện thoại? = 118 Khi không đủ chỗ, bảng auto giữ chiều rộng tối thiểu theo từ/nội dung và cuộn ngang trong wrapper. Cell dùng word-break: normal và overflow-wrap: break-word để không kế thừa overflow-wrap: anywhere từ nội dung bài. Chuỗi hoặc URL liền rất dài có thể làm bảng rộng đáng kể; đây là đánh đổi để không ép cột xuống từng ký tự. Không áp min-width cố định cho mọi bảng hoặc nowrap cho cột theo vị trí. 119 Caption ở trong wrapper; các style viền, nền và stripes hiện có được giữ. CSS Table block áp dụng cả frontend và editor theo cơ chế nạp block stylesheet sẵn có. CSS riêng từ plugin, Site Editor hoặc width/white-space do tác giả đặt có thể ảnh hưởng kết quả. 120 121 = Làm sao mở rộng bảng hoặc ảnh bằng ảnh cover? = 122 Chọn block trong trình sửa bài → sidebar Block → Chiều rộng → bật “Mở rộng bằng ảnh cover”. Hỗ trợ Image, Table, Gallery, Video, Embed, Cover, Columns, Group, Media & Text, Code và Pullquote. Với block lồng trong Group/Columns, bật trên nhóm/cột ngoài cùng. 123 Tắt công tắc để về chiều rộng nội dung; công tắc dùng class/align của block, giữ các class/style khác. Các lựa chọn căn rộng/căn toàn chiều rộng sẵn có của WordPress vẫn được hỗ trợ. Bảng rộng hơn khung sẽ cuộn ngang. 124 125 = Làm sao cập nhật theme? = 126 1. Sao lưu website và ghi lại các template/template part đã tùy chỉnh; nên thử trên staging. 127 2. Cài gói ZIP mới bằng chức năng tải giao diện lên của WordPress và chọn thay thế bản đã cài. 128 3. Xóa cache của plugin cache, LiteSpeed và CDN nếu có. 129 4. Mở Giao diện > Simple TN để kiểm tra các tùy chọn, đặc biệt thumbnail, mục lục và chế độ màu tối. 130 5. Nếu template hoặc template part đã lưu trong Site Editor không nhận thay đổi từ theme, sao lưu nội dung tùy chỉnh rồi chỉ đặt lại mục cần cập nhật. Đặt lại sẽ bỏ phần tùy chỉnh của mục đó. 131 6. Kiểm tra Home, trang 2, một chuyên mục, tìm kiếm (cả bài viết và trang), bài viết và menu trên desktop/mobile. 132 7. Với bản 1.3.17 trở lên, kiểm tra một bảng auto và một bảng đã bật fixed; trên mobile, bảng nhiều cột phải cuộn trong khung, không làm tràn trang. Không cần sửa/lưu lại các bảng cũ; nếu còn giao diện cũ, kiểm tra cache và CSS tùy chỉnh. 133 134 = Vì sao phân trang còn có query-0-page trong URL? = 135 Đây là tham số phân trang cũ, có thể còn trong liên kết hoặc HTML đã cache. Từ 1.3.11, theme chuyển 301 URL cũ sang URL phân trang của main query trên Home, chuyên mục/lưu trữ và tìm kiếm. 136 Ví dụ với permalink đẹp: /?query-0-page=2 chuyển tới /page/2/; /page/2/?query-0-page=2 chuyển tới /page/2/. Nếu đường dẫn đã có số trang, số đó được ưu tiên; các tham số tìm kiếm, chuyên mục và tham số khác vẫn được giữ. Với permalink mặc định, URL dùng ?paged=2. 137 Sau khi nâng cấp, xóa cache LiteSpeed/CDN để loại HTML và liên kết cũ. Nếu trang chủ sạch vẫn sinh link query-0-page mới, kiểm tra Query block đã lưu trong Site Editor có đang kế thừa main query hay không. 72 138 73 139 = Theme có dùng JavaScript không? = 74 Không có JavaScript riêng từ theme. Theme chỉ dùng JavaScript có sẵn của WordPress cho menu mobile và trả lời bình luận.140 Có. Theme dùng JavaScript nhỏ cho chuyển nền sáng/tối, thu menu header khi không đủ chỗ, focus/đóng panel tìm kiếm, thu gọn mục lục trên mobile và đo khoảng bù sticky header. Trong editor có script thêm công tắc mở rộng block bằng ảnh cover; script này không tải ở frontend. Table responsive dùng CSS, không thêm JavaScript đo width hoặc phân loại cột. Từ 1.3.18, script TOC được in inline trong head để tránh một request chặn tải; stylesheet TOC tham gia ngân sách inline CSS của core. Link mục lục và lịch sử URL dùng hành vi gốc của trình duyệt; không thêm thư viện TOC. Menu mobile và trả lời bình luận dùng JavaScript của WordPress core. Trang Giao diện > Simple TN dùng color picker của WordPress và script nhỏ để chọn preset, mở/thu phần màu tùy chỉnh; CSS cài đặt chỉ tải trên trang này. 75 141 76 142 == Changelog == 77 143 78 144 Các mục dưới là lịch sử thay đổi. 145 146 = 1.3.18 = 147 * Inline JavaScript khởi tạo mục lục nhỏ qua API WordPress trong head, bỏ request script đồng bộ nhưng giữ thu gọn mobile trước lần vẽ đầu tiên. 148 * Cho stylesheet mục lục tham gia cơ chế inline CSS theo ngân sách sẵn có của WordPress/theme. Nếu vượt ngân sách, core vẫn dùng file CSS bên ngoài. 149 * Giữ file CSS/JS nguồn riêng, điều kiện bật/tắt TOC và loại trừ trang không áp dụng; không thêm dependency hoặc thay đổi nội dung database. 150 * Thêm tab README tại Giao diện > Simple TN: đọc đầy đủ readme.txt đi kèm theme, gồm hướng dẫn, FAQ, changelog và lưu ý nâng cấp. Hiển thị văn bản an toàn, hỗ trợ mobile và bàn phím; không tải color picker hoặc form lưu cài đặt trên tab này. 151 * Giữ tab Cài đặt với đủ 4 nhóm và Settings API hiện có; không thay đổi option đã lưu. Tăng version lên 1.3.18 để làm mới cache asset. 152 153 = 1.3.17 = 154 * Sửa Table block auto bị ép cột quá hẹp do kế thừa overflow-wrap: anywhere từ nội dung bài. Cell auto dùng word-break: normal và overflow-wrap: break-word; table giữ width: 100% và table-layout: auto. 155 * Giữ phân bổ cột tự nhiên theo nội dung và cuộn ngang trong wrapper khi không đủ chỗ; bổ sung -webkit-overflow-scrolling: touch. Không áp width/min-width chung cho từng cột, không suy đoán semantic và không thêm JavaScript. 156 * Loại trừ .has-fixed-layout khỏi các rule auto mới, giữ fixed layout và cách wrap của WordPress core cho các bảng cũ. 157 * Cập nhật hướng dẫn Table auto/fixed, giới hạn với URL/chuỗi dài, chiều rộng theo cover, tìm kiếm, cache và nâng cấp. Không thay đổi dữ liệu bài viết hoặc cài đặt đã lưu. 158 159 = 1.3.16 = 160 * Tìm kiếm cả bài viết và trang, cập nhật nhãn tìm kiếm. 161 * Search header tự focus ô nhập khi mở; Esc đóng và trả focus về icon. 162 * Làm mới thanh search với ô nhập và nút tìm liền mạch, viền focus rõ và hỗ trợ sáng/tối, mobile. 163 164 = 1.3.15 = 165 * Thêm công tắc riêng Block → Chiều rộng → Mở rộng bằng ảnh cover khi tạo/sửa bài: hỗ trợ Image, Table, Gallery, Video, Embed, Cover, Columns, Group, Media & Text, Code và Pullquote. Lưu theo block, giữ các class/style khác; tắt để về chiều rộng nội dung. 166 * Block ngoài cùng mở rộng bằng cover; với block lồng nhau, bật trên Group/Columns ngoài cùng. Ảnh tự lấp đầy khung; mobile không tràn màn hình. 167 168 = 1.3.14 = 169 * Bật hỗ trợ align-wide để editor hiển thị tùy chọn căn rộng cho ảnh, bảng, gallery và các block có hỗ trợ. Chiều rộng wide dùng chung 1080px với ảnh đầu bài. 170 171 = 1.3.13 = 172 * Thêm mục lục tự động từ H3 cho bài đơn: mặc định tối thiểu 4 H3, H4 tùy chọn; giữ nguyên hierarchy heading và ID có sẵn, xử lý slug tiếng Việt và heading trùng tên. 173 * Thêm nhóm Table of Contents trong Giao diện > Simple TN: bật/tắt, ngưỡng H3 (2–10), hiển thị H4 và thu gọn trên mobile; dùng chung Settings API và option hiện tại. 174 * Mục lục dùng nav, danh sách có thứ tự và details/summary; hỗ trợ bàn phím, focus rõ ràng, cuộn mượt, bù sticky header và reduced motion. Không thêm dependency hoặc thay đổi post_content trong database. 175 * Tắt TOC sẽ ngừng parse và không tải asset riêng. Không xử lý page, archive, search, excerpt, feed, REST hoặc bài đang khóa mật khẩu. 176 * Sửa khoảng cách hai dòng category trên mobile: bỏ min-height 44px, giữ vùng bấm tối thiểu 24px; desktop giữ nguyên. 177 * Kiểm tra TOC trên WordPress 7.1.4 với PHP 8.0/8.3, Chromium ở 6 độ rộng và axe cho mục lục; các test hồi quy PHP, Settings, mobile, header, thumbnail và accessibility ảnh đều pass. 178 179 = 1.3.12 = 180 * Sửa điểm Tab trùng ở ảnh thumbnail danh sách và bài liên quan: link ảnh được xử lý giống hero, không tạo thêm mục đọc cho screen reader; tiêu đề vẫn là link truy cập được. 181 * Tránh focus bàn phím rơi vào ảnh bài liên quan có viền focus bị khung ảnh cắt; Tab qua link tiêu đề có focus hiển thị rõ. Chuột/chạm vẫn bấm ảnh như cũ. 182 * Giữ nguyên bố cục, đích link ảnh, lazy loading của ảnh danh sách/bài liên quan và ưu tiên LCP của hero/ảnh đầu bài. 183 * Qua 24 trường hợp regression bàn phím/bấm ảnh, kiểm tra PHP cho link ảnh và hồi quy Home/hero, archive; chạy lại 192 trường hợp axe-core không báo vi phạm tự động. 184 * Thêm accessibility.txt theo chuẩn WordPress, ghi rõ phạm vi kiểm tra, giới hạn và nơi báo lỗi; chưa tuyên bố đạt đánh giá chính thức. 185 186 = 1.3.11 = 187 * Sửa tham số query-0-page cũ bị giữ trong các link phân trang tiếp theo. 188 * Chuyển 301 về URL main query sạch trên Home, archive và search; số trang hiện có trong đường dẫn được ưu tiên. 189 * Giữ các tham số khác, hỗ trợ permalink đẹp và dạng ?paged=; không can thiệp tham số của query phụ. 190 * Kiểm tra trên WordPress thử nghiệm: 12 trường hợp URL, đầu vào không hợp lệ, link pagination core và hồi quy Home/hero, archive. 191 * Cập nhật README: hướng dẫn tính năng, cài đặt, nâng cấp và lịch sử 1.3.5–1.3.11. 192 193 = 1.3.10 = 194 * Danh sách desktop tự rộng thêm phần thumbnail và khoảng cách khi có ảnh, giới hạn theo màn hình. 195 * Giữ độ rộng meta và tiêu đề so với lúc tắt ảnh khi đủ chỗ; bài không có ảnh vẫn giữ độ rộng phần chữ cũ. 196 * Kiểm tra 8 kích thước, cả khung wide/constrained và trạng thái bật/tắt thumbnail. 197 198 = 1.3.9 = 199 * Dưới 782px, thumbnail danh sách nằm phía trên meta và phần chữ, rộng toàn hàng, tỷ lệ 16:9 như hero. 200 * Desktop giữ thumbnail ở cột phải; kiểm tra thêm hai phía breakpoint 781/782px. 201 202 = 1.3.8 = 203 * Sắp xếp trang Simple TN thành Header & menu, Bài viết, Màu sắc & nền tối. 204 * Hai cột trên màn hình rộng, một cột khi hẹp; thêm liên kết nhảy tới từng nhóm. 205 * Bảng màu tối riêng có thể thu gọn, các ô màu xếp theo lưới; vẫn gửi đủ dữ liệu khi thu gọn. 206 * Giữ Settings API và kiểm tra quyền; CSS chỉ tải trên trang cài đặt. Kiểm tra responsive ở 375, 768, 1024 và 1440px với color picker WordPress. 207 208 = 1.3.7 = 209 * Thêm 6 style variation: Đại dương, Rừng, Oải hương, Đất nung, Hoa hồng và Đá phiến. 210 * Cả 8 bộ màu (gồm Mặc định và Ấm) có bảng màu sáng/tối đi cùng; hỗ trợ màu tối tự theo style và chỉnh tay. 211 * Giữ bảng màu tối tùy chỉnh cũ; màu thiếu hoặc không hợp lệ dùng giá trị dự phòng. 212 * Các cặp chữ/nền được kiểm tra trên cả 8 bộ sáng/tối đạt tương phản tối thiểu 4,5:1. 213 214 = 1.3.6 = 215 * Ảnh hero Home đổi sang tỷ lệ 16:9. 216 * Tăng cỡ mặc định H2/H3/H4 trong nội dung bài, lần lượt 30–36px, 24–28px và 20–24px khi cỡ chữ gốc là 16px. 217 218 = 1.3.5 = 219 * Thêm tùy chọn ẩn/hiện logo header, giữ tên website; mặc định hiện logo. 220 * Thêm tùy chọn thumbnail danh sách bài cho Home, archive và search; mặc định tắt, dùng ảnh đại diện tỷ lệ 16:9. 221 222 = 1.3.4 = 223 * Sửa menu header căn phải tràn về bên trái và chèn lên logo ở màn hình iPad. 224 * Đo biên thực tế của danh sách menu và nút chuyển nền để thu menu ngay khi vượt vùng được cấp. 225 * Bổ sung kiểm tra hồi quy menu căn phải và các chiều rộng iPad dọc/ngang trên Chromium, WebKit. 226 227 = 1.3.3 = 228 * Header tự thu menu khi thiếu chiều ngang, giữ kích thước logo và các nút thao tác. 229 * Tối ưu mobile: panel tìm kiếm nằm trong viewport, ô nhập không đè nút; tăng vùng chạm chuyên mục, tag, RSS và submenu lên tối thiểu 44px. 230 * Tiêu đề, URL và nhãn menu dài tự ngắt trong cột để tránh tràn ngang. 231 232 = 1.3.2 = 233 * Thêm 2 bộ màu tối có sẵn: "Tối mặc định" (trung tính) và "Tối ấm" (nền nâu ấm, nhấn hồng), tương ứng 2 bảng màu sáng. 234 * Chọn bộ màu trong Giao diện > Simple TN sẽ điền nhanh 7 ô; vẫn chỉnh từng màu và lưu như cũ. 235 * Cả hai bộ màu tối đều đạt contrast WCAG AA cho chữ/nền. 236 * Không đổi bố cục giao diện. 237 238 = 1.3.1 = 239 * Bảng màu tối chỉnh được trong Giao diện > Simple TN: 7 màu (nền, nền phụ, chữ chính, chữ phụ, đường kẻ, màu nhấn, chữ trên nền nhấn) bằng color picker của WordPress. 240 * Nền tối mặc định #0f0f11; bảng màu tối tách khỏi bảng màu sáng trong Site Editor để đổi nền tối không ảnh hưởng giao diện sáng. 241 * Màu tối in thành biến --wp--preset--color--* trong head, áp dụng cho mọi block và style variation. 242 * Không đổi bố cục giao diện. 243 244 = 1.3.0 = 245 * Thêm nền tối: nút chuyển nền sáng/tối trong menu header; trên mobile nút nằm trong menu mở. 246 * Nút theo cài đặt hệ thống của khách, lưu lựa chọn trong localStorage; không cookie, không gửi dữ liệu đi. 247 * Bảng màu tối ghi đè biến palette của theme.json nên áp dụng cho mọi block và style variation. 248 * Thêm tùy chọn bật/tắt nút trong Giao diện > Simple TN. 249 * JavaScript của theme chỉ gồm đoạn nhỏ trong inc/dark-mode.php; không thư viện ngoài. 250 * Không đổi bố cục giao diện. 251 252 = 1.2.12 = 253 * Nới khoảng cách giữa meta (ngày, chuyên mục) và tiêu đề ở hero trang chủ và đầu trang đọc; dùng spacing token 30 (1–1.25rem) thay cho margin 0.15–0.35rem. 254 * Không đổi bố cục khác. 255 256 = 1.2.11 = 257 * Sửa: chọn menu header/footer trong Giao diện > Simple TN áp dụng cả khi template part header/footer đã tùy biến trong Site Editor, không còn phụ thuộc class tn-nav--header/tn-nav--footer. 258 * Trang cài đặt ghi chú khi menu đang ghi đè thiết lập của Navigation block trong Site Editor. 259 * Không đổi bố cục giao diện. 260 261 = 1.2.10 = 262 * Thêm trang cài đặt Giao diện > Simple TN: bật/tắt ngày đăng, tên tác giả; chọn menu header/footer. 263 * Submenu ở footer mở ngược lên trên và căn phải, không còn bị cắt ở cuối trang; submenu cấp 2 mở sang trái. 264 * Tùy chọn lưu trong một option simple_tn_options bằng Settings API, sanitize và escape đầy đủ; không thêm JavaScript. 265 * Thêm class tn-nav--header và tn-nav--footer cho Navigation block trong pattern header/footer. 266 * POT cập nhật 111 chuỗi. 267 * Không đổi bố cục mặc định. 79 268 80 269 = 1.2.9 = … … 232 421 == Upgrade Notice == 233 422 423 = 1.3.18 = 424 Thêm tab README trong Giao diện > Simple TN và bỏ request chặn tải của JavaScript TOC; CSS TOC có thể inline theo ngân sách core. Giữ nguyên nội dung bài, mục lục và tùy chọn đã lưu. Xóa cache plugin/CDN/trình duyệt sau khi cập nhật; kiểm tra mục lục và trang cài đặt trên staging trước khi thay bản đang dùng. 425 426 = 1.3.17 = 427 Cải thiện khả năng đọc của Table block auto và cuộn ngang trên mobile; giữ nguyên bảng đã bật fixed layout. Không cần đặt width từng cột hay lưu lại bài viết. Xóa cache plugin/CDN/trình duyệt sau khi cập nhật; kiểm tra bảng auto/fixed ở frontend và editor nếu site có CSS tùy chỉnh. 428 429 = 1.3.13 = 430 Thêm mục lục bài viết, mặc định bật với ít nhất 4 H3. Cấu hình hoặc tắt tại Giao diện > Simple TN > Table of Contents. Giữ các tùy chọn cũ và nội dung database; xóa cache sau khi cập nhật. Category trên mobile xuống hai dòng gọn hơn. 431 432 = 1.3.12 = 433 Sửa thứ tự Tab và focus của ảnh danh sách/bài liên quan; thêm accessibility.txt. Không đổi bố cục hay tùy chọn đã lưu. Xóa cache sau khi cập nhật để nhận HTML mới. 434 435 = 1.3.11 = 436 Sửa URL phân trang cũ và cập nhật tài liệu. Cài bản mới rồi xóa cache LiteSpeed/CDN. Nếu template đã tùy chỉnh không nhận tính năng mới, sao lưu trước khi đặt lại từng mục trong Site Editor. 437 438 = 1.3.10 = 439 Danh sách có thumbnail tự mở rộng trên desktop, giữ độ rộng phần chữ khi đủ chỗ. 440 441 = 1.3.9 = 442 Thumbnail danh sách chuyển lên trên phần chữ ở mobile, giữ tỷ lệ 16:9. 443 444 = 1.3.8 = 445 Sắp xếp lại trang cài đặt thành 3 nhóm; giữ tùy chọn đã lưu. 446 447 = 1.3.7 = 448 Thêm 6 bộ màu và màu tối tự theo style. Bảng màu tối tùy chỉnh cũ được giữ ở chế độ thủ công. 449 450 = 1.3.6 = 451 Ảnh hero 16:9 và heading H2/H3/H4 trong bài lớn hơn. 452 453 = 1.3.5 = 454 Thêm bật/tắt logo header và thumbnail danh sách. Thumbnail mặc định tắt. 455 456 = 1.3.4 = 457 Sửa lỗi menu dài căn phải chèn lên logo trên iPad; cập nhật cơ chế phát hiện tràn menu. 458 459 = 1.3.3 = 460 Tối ưu header và trải nghiệm mobile: menu thích ứng, searchbar, vùng chạm và nội dung dài. 461 462 = 1.3.2 = 463 Thêm 2 bộ màu tối có sẵn: "Tối mặc định" và "Tối ấm", chọn trong Giao diện > Simple TN. Không đổi bố cục. 464 465 = 1.3.1 = 466 Bảng màu tối chỉnh được trong Giao diện > Simple TN (7 màu, mặc định nền #0f0f11). Không đổi bố cục. 467 468 = 1.3.0 = 469 Thêm nền tối và nút chuyển nền sáng/tối trên header; có thể tắt trong Giao diện > Simple TN. Không đổi bố cục. 470 471 = 1.2.12 = 472 Nới khoảng cách giữa meta (ngày, chuyên mục) và tiêu đề ở hero trang chủ và đầu trang đọc. Không đổi bố cục khác. 473 474 = 1.2.11 = 475 Sửa lỗi chọn menu header/footer không áp dụng với template part đã tùy biến trong Site Editor. Không đổi giao diện. 476 477 = 1.2.10 = 478 Thêm trang cài đặt Giao diện > Simple TN để bật/tắt ngày đăng, tên tác giả và chọn menu header/footer. Submenu ở footer mở lên trên. Không đổi bố cục mặc định. 479 234 480 = 1.2.9 = 235 481 Đổi tên theme thành Simple TN, cập nhật tài liệu và bỏ code SEO không còn dùng. Không đổi bố cục. … … 238 484 Cập nhật tài liệu và đóng gói; không thay đổi giao diện. 239 485 486 == Kiểm tra bản 1.3.18 == 487 488 * TOC: 51 assertion PHP pass trên PHP 8.0 và 8.3; kiểm tra HTML render xác nhận script inline trong head và stylesheet tham gia ngân sách inline core. Giữ kiểm tra mục lục ở 6 độ rộng, bàn phím, focus, anchor/history, sticky header, reduced motion và fallback không JavaScript. 489 * Đo cold-load fixture cục bộ với Chromium, 3 mẫu mỗi bản ở 390/1440px, giả lập độ trễ 120 ms/resource: request giảm 9 xuống 7; trung vị DOMContentLoaded giảm khoảng 259 xuống 134 ms trên mobile và 258 xuống 138 ms trên desktop. HTML nén tăng khoảng 1,2 KB; đây không phải Web Vitals hay cam kết tốc độ website thật, chưa đo lợi ích khi cache trình duyệt đã ấm. 490 * Tab README: kiểm tra nội dung đầy đủ khớp file sau escaping, quyền truy cập, tab mặc định/fallback, không có form lưu hay dependency color picker; tab Cài đặt giữ đủ field/nonce và cách lưu hiện tại. 491 * Các kiểm tra Table và hồi quy 1.3.17 bên dưới vẫn mô tả phạm vi fixture, không thay thế kiểm thử plugin/CSS riêng của website. 492 493 == Kiểm tra bản 1.3.17 == 494 495 * PHP 8.0: kiểm tra cú pháp toàn bộ PHP của theme; chạy lại các test hiện có cho palette/cài đặt, hero excerpt, query Home/archive, pagination cũ, link ảnh, tìm kiếm và mục lục trên WordPress thử nghiệm dùng một lần 7.1.4. 496 * Table block trên Chromium với stylesheet core WordPress thử nghiệm 7.1.4: 28 tổ hợp viewport/context/layout, mỗi tổ hợp gồm 6 mẫu bảng (2, 3, 4, 10 cột, URL dài và bảng ngắn); bao phủ header/footer/caption, số/ngày, text dài, stripes, viền/nền, auto/fixed. Độ rộng 320, 375, 390, 430, 768, 1024 và 1440px. Test context editor dùng HTML fixture, không thay cho thử trực tiếp Gutenberg. 497 * Các test hồi quy browser cho mobile, tìm kiếm header, menu thích ứng, thumbnail danh sách và chiều rộng theo cover đã pass. Kiểm tra cú pháp JavaScript, JSON cấu hình/style và tương phản chữ ở cả 8 bộ màu sáng/tối đã pass. 498 * Fixed layout được đối chiếu kích thước cell và computed style trước/sau; các rule auto mới không làm đổi kết quả trên fixture. Không cần migrate database, sửa nội dung bài hoặc đặt lại template để nhận CSS Table mới. 499 * Giới hạn: chưa kiểm tra trực tiếp trên WordPress 7.0, Gutenberg đang mở, thiết bị cảm ứng thật, screen reader hoặc CSS/plugin riêng của website. Firefox/WebKit chưa chạy lại cho bản này do runtime thiếu browser binary đúng phiên bản. Các con số kiểm tra accessibility ở phần dưới là lịch sử của các bản tương ứng, không phải một đợt audit WCAG mới cho 1.3.17. 500 240 501 == Privacy == 241 502 242 Theme không t hu thập, lưu hay gửi dữ liệu người dùng. Theme không đặt cookie, không tải script theo dõi hay quảng cáo, không gọi tài nguyên bên ngoài; font được đóng gói trong theme. Bình luận và tìm kiếm do WordPress core và plugin của site xử lý; xem chính sách quyền riêng tư của site.503 Theme không tự thu thập hoặc gửi dữ liệu phân tích người dùng; các cài đặt giao diện được lưu trong database WordPress. Theme không đặt cookie, không tải script theo dõi hay quảng cáo, không gọi tài nguyên bên ngoài; font được đóng gói trong theme. Nút chuyển nền tối lưu lựa chọn sáng/tối trong localStorage của trình duyệt; lựa chọn này không được gửi lên máy chủ hay dịch vụ bên ngoài, và xoá dữ liệu trang trong trình duyệt sẽ xoá nó. Bình luận và tìm kiếm do WordPress core và plugin của site xử lý; xem chính sách quyền riêng tư của site. 243 504 244 505 == Accessibility == 245 506 246 Theme hướng tới WCAG 2.2 AA. Đã kiểm tra: 247 248 * axe-core 4.10 (WCAG 2.2 AA + best practice): 0 vi phạm trên Home, archive, search, single và 404 ở 320, 390, 820, 1024 và 1440px, cả hai style variation. 249 * Bàn phím: liên kết, nút, form, menu mobile và panel tìm kiếm đều dùng được; focus hiển thị rõ. 507 Theme hướng tới WCAG 2.2 AA và hướng dẫn accessibility-ready của WordPress. Tuyên bố accessibility, phương pháp kiểm tra, giới hạn và nơi báo lỗi nằm trong accessibility.txt ở thư mục gốc theme. Đây chưa phải chứng nhận WCAG hay phê duyệt của WordPress.org. 508 509 Phạm vi kiểm tra: 510 511 * axe-core 4.14.0: 192 trường hợp trên Home, archive, search, single, page và 404, cả 8 bộ màu sáng/tối ở 320 và 1440px; không báo vi phạm tự động. Một số kiểm tra cần xem xét thủ công, không thể kết luận đạt WCAG chỉ từ kết quả axe. 512 * Từ 1.3.7, kiểm tra tương phản trên cả 8 bộ màu sáng/tối: chữ chính, chữ phụ trên nền/nền phụ, màu nhấn trên nền và chữ trên nút nhấn đạt tối thiểu 4,5:1. Đây là kiểm tra bảng màu, không thay thế kiểm tra WCAG toàn trang. 513 * TOC 1.3.13: Chromium ở 320, 390, 781, 782, 1024 và 1440px; kiểm tra bàn phím, focus, anchor/back/forward, sticky header, reduced motion và fallback không JavaScript. axe-core không báo vi phạm trong phạm vi mục lục; chưa kiểm tra với screen reader. 514 * Trang cài đặt: đã kiểm tra nhãn, focus bàn phím, color picker và không tràn ngang ở 375, 768, 1024 và 1440px. 515 * Bàn phím: đã kiểm tra skip link, menu mobile Enter/Escape và trả focus, tìm kiếm, link tiêu đề bài; ảnh trùng đích không tạo thêm điểm Tab. Form bình luận giữ nhãn và thuộc tính bắt buộc của WordPress core. 516 * Chưa kiểm tra NVDA/VoiceOver và chưa hoàn tất đánh giá conformance toàn bộ; xem giới hạn đầy đủ trong accessibility.txt. 517 * Nút chuyển nền tối dùng button thật, có `aria-pressed`, nhãn đổi theo trạng thái, vùng chạm 44px trên header và 56px trong menu mobile. 518 * Bảng màu tối mặc định đã kiểm tra contrast chữ/nền: "Tối mặc định" 17,4:1 / 8,0:1 / 9,2:1 và "Tối ấm" 16,0:1 / 7,9:1 / 9,1:1 (chữ chính / chữ phụ / nhấn, WCAG AA). Nếu tự đổi bảng màu tối, cần kiểm tra lại contrast. 250 519 * Skip link "Skip to content" do WordPress core tự thêm vào thẻ main. 251 520 * Reflow ở 320px, không tràn ngang. … … 254 523 255 524 Phản hồi về khả năng tiếp cận: https://thanhnghiep.top 256 Cập nhật lần cuối: 29/10/2026.525 Cập nhật lần cuối: 31/10/2026. 257 526 258 527 == Resources == -
simple-tn/1.3.18/style.css
r356199 r356992 3 3 Author: Nghiệp 4 4 Author URI: https://thanhnghiep.top 5 Description: Block theme tối giản cho blog cá nhân. Mobile-first, tập trung vào trải nghiệm đọc, không sidebar, không JavaScript từ theme. Màu, font, menu và footer chỉnh được trong Site Editor.5 Description: Block theme tối giản cho blog cá nhân. Mobile-first, tập trung vào trải nghiệm đọc, không sidebar, JavaScript tối thiểu cho chuyển nền tối, menu thích ứng và mục lục bài viết. Màu, font, menu và footer chỉnh được trong Site Editor; bật/tắt ngày, tác giả, nền tối và chọn menu nhanh trong Giao diện > Simple TN. 6 6 Requires at least: 7.0 7 7 Tested up to: 7.1 8 8 Requires PHP: 8.0 9 Version: 1. 2.99 Version: 1.3.18 10 10 License: GNU General Public License v2 or later 11 11 License URI: https://www.gnu.org/licenses/gpl-2.0.html -
simple-tn/1.3.18/styles/warm.json
r356199 r356992 42 42 } 43 43 ] 44 }, 45 "custom": { 46 "dark-palette": { 47 "base": "#16120e", 48 "surface": "#211b15", 49 "contrast": "#f4ede3", 50 "muted": "#b3a79a", 51 "border": "#3a3027", 52 "accent": "#e9a2b1", 53 "accent-contrast": "#1a0e12" 54 } 44 55 } 45 56 } -
simple-tn/1.3.18/theme.json
r356199 r356992 256 256 } 257 257 ] 258 }, 259 "custom": { 260 "dark-palette": { 261 "base": "#0f0f11", 262 "surface": "#1a1a1e", 263 "contrast": "#f4f4f5", 264 "muted": "#a7a7ae", 265 "border": "#2e2e33", 266 "accent": "#7fb7ff", 267 "accent-contrast": "#0b0b0d" 268 } 258 269 } 259 270 },
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)