Slider là một thành phần quan trọng giúp hiển thị nội dung nổi bật trên website một cách trực quan và thu hút. Trong bài viết này, bạn sẽ được hướng dẫn chi tiết cách tạo Slider động bằng ACF cho WordPress, kết hợp sử dụng PHP, CSS, và JavaScript để tối ưu hiệu suất và giao diện.
1. Tổng quan về Slider và ACF
Slider là gì?
Slider là một khu vực trên trang web, nơi nội dung (thường là hình ảnh và văn bản) được trình bày theo dạng trình chiếu với hiệu ứng chuyển động. Slider giúp thu hút sự chú ý của người dùng và tăng trải nghiệm trực quan.
Tại sao sử dụng ACF để tạo Slider?
Advanced Custom Fields (ACF) là một plugin mạnh mẽ trong WordPress, hỗ trợ thêm các trường tùy chỉnh vào trang quản trị, giúp quản lý nội dung Slider dễ dàng hơn. Khi sử dụng ACF:
- Bạn có thể thêm nội dung Slider động, bao gồm hình ảnh, tiêu đề, mô tả, và liên kết.
- Cấu hình và hiển thị nội dung Slider trên website một cách linh hoạt.
- Dễ dàng chỉnh sửa và mở rộng nội dung thông qua giao diện quản trị.
2. Các bước tạo Slider bằng ACF
Bước 1: Cài đặt và kích hoạt ACF
- Truy cập Plugins > Add New trong WordPress Admin.
- Tìm kiếm “Advanced Custom Fields”.
- Cài đặt và kích hoạt plugin.
Bước 2: Tạo nhóm trường ACF cho Slider
Ở đây, các bạn chỉ cần thêm json này vào plugin ACF là được nhé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | [ { "key": "group_660aedda23e07", "title": "Slider", "fields": [ { "key": "field_660aedda60480", "label": "Slider item", "name": "slider_item", "aria-label": "", "type": "repeater", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "", "class": "", "id": "" }, "layout": "block", "pagination": 0, "min": 0, "max": 0, "collapsed": "field_660aedf660481", "button_label": "Thêm banner", "rows_per_page": 20, "sub_fields": [ { "key": "field_660aedf660481", "label": "Image item", "name": "image_item", "aria-label": "", "type": "image", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "20", "class": "", "id": "" }, "return_format": "array", "library": "all", "min_width": "", "min_height": "", "min_size": "", "max_width": "", "max_height": "", "max_size": "", "mime_types": "", "preview_size": "medium", "parent_repeater": "field_660aedda60480" }, { "key": "field_667c3fefadd14", "label": "Title", "name": "title", "aria-label": "", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "25", "class": "", "id": "" }, "default_value": "", "maxlength": "", "placeholder": "", "prepend": "", "append": "", "parent_repeater": "field_660aedda60480" }, { "key": "field_660aee0b60482", "label": "Content", "name": "content", "aria-label": "", "type": "textarea", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "30", "class": "", "id": "" }, "default_value": "", "maxlength": "", "rows": 3, "placeholder": "", "new_lines": "", "parent_repeater": "field_660aedda60480" }, { "key": "field_667c3ffdadd15", "label": "Buttom links", "name": "buttom_links", "aria-label": "", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "25", "class": "", "id": "" }, "default_value": "", "maxlength": "", "placeholder": "", "prepend": "", "append": "", "parent_repeater": "field_660aedda60480" } ] } ], "location": [ [ { "param": "options_page", "operator": "==", "value": "banner" } ] ], "menu_order": 0, "position": "acf_after_title", "style": "seamless", "label_placement": "top", "instruction_placement": "label", "hide_on_screen": "", "active": true, "description": "", "show_in_rest": 0 }, { "key": "ui_options_page_660aed6df402b", "title": "Banner", "active": true, "menu_order": 0, "page_title": "Banner", "menu_slug": "banner", "parent_slug": "none", "advanced_configuration": 1, "icon_url": "dashicons-admin-media", "menu_title": "Banner Nw", "position": 2, "redirect": 0, "description": "", "update_button": "Update", "updated_message": "Options Updated", "capability": "edit_posts", "data_storage": "options", "post_id": "", "autoload": 0 } ] |
Bước 3: Tạo shortcode để hiển thị Slider
Thêm đoạn mã PHP sau vào file functions.php hoặc một plugin tùy chỉnh.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | function custom_slider() { ob_start(); ?> <div class="container-cs"> <div class="slider-cs"> <?php $doitac_items = get_field('slider_item', 'option'); if ($doitac_items): foreach ($doitac_items as $item): $image = isset($item['image_item']) ? $item['image_item'] : null; $title = isset($item['title']) ? $item['title'] : ''; $mota = isset($item['content']) ? $item['content'] : ''; $links = isset($item['buttom_links']) ? $item['buttom_links'] : ''; if ($image): ?> <div class="slider-item" style="background-image:url('<?php echo esc_url($image['url']); ?>')"> <div class="content-cs"> <?php if ($title): ?> <div class="title-item"> <?php echo $title; ?> </div> <?php endif; ?> <?php if ($mota): ?> <div class="mota-item"> <?php echo $mota; ?> </div> <?php endif; ?> <?php if ($links): ?> <div class="links-item"> <?php echo '<a href="' . $links . '">Xem ngay</a>';?> </div> <?php endif; ?> </div> </div> <?php endif; endforeach; endif; ?> </div> <div class="button-cs"> <button class="prev"><i class="fa-solid fa-arrow-left"></i></button> <button class="next"><i class="fa-solid fa-arrow-right"></i></button> </div> <div class="progress-sub-container"> <div class="progress-sub-background"> <div class="progress-sub-foreground" style=""></div> </div> </div> <div class="slide-numbers" id="slide-numbers"></div> </div> <?php return ob_get_clean(); } add_shortcode('Slider_cs', 'custom_slider'); |
Bước 4: Thêm JavaScript điều khiển slider
Thêm đoạn JavaScript sau để quản lý hiệu ứng chuyển slide.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <script> let next = document.querySelector('.next'); let prev = document.querySelector('.prev'); let slider = document.querySelector('.slider-cs'); let progressBar = document.querySelector('.progress-sub-foreground'); let slideNumbers = document.getElementById('slide-numbers'); let items = document.querySelectorAll('.slider-item'); let totalItems = items.length; let currentIndex = 0; let interval; function updateItems() { items = document.querySelectorAll('.slider-item'); } function updateProgressBar() { let progress = ((currentIndex + 1) / totalItems) * 100; progressBar.style.width = progress + '%'; } function updateSlideNumbers() { slideNumbers.innerText = `${currentIndex + 1} / ${totalItems}`; } function showNextItem() { slider.appendChild(items[0]); currentIndex = (currentIndex + 1) % totalItems; updateItems(); updateProgressBar(); updateSlideNumbers(); } function showPrevItem() { slider.prepend(items[items.length - 1]); currentIndex = (currentIndex - 1 + totalItems) % totalItems; updateItems(); updateProgressBar(); updateSlideNumbers(); } next.addEventListener('click', function() { showNextItem(); }); prev.addEventListener('click', function() { showPrevItem(); }); interval = setInterval(showNextItem, 3000); function pauseInterval() { clearInterval(interval); } function resumeInterval() { interval = setInterval(showNextItem, 3000); } slider.addEventListener('mouseover', pauseInterval); slider.addEventListener('mouseout', resumeInterval); next.addEventListener('mouseover', pauseInterval); next.addEventListener('mouseout', resumeInterval); prev.addEventListener('mouseover', pauseInterval); prev.addEventListener('mouseout', resumeInterval); updateProgressBar(); updateSlideNumbers(); </script> |
Bước 5: Thêm CSS để định dạng giao diện
Thêm đoạn CSS sau để tạo giao diện Slider:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | .container-cs { position: relative; padding-top: 56.25%; } .slider-cs .slider-item{ width: 150px; height: 200px; position: absolute; bottom:20px; border-radius: 20px; background-position: 50% 50%; background-size: cover; display: inline-block; transition: 0.5s; } .slider-cs .slider-item:nth-child(1), .slider-cs .slider-item:nth-child(2){ bottom: 0; left: 0; transform: translate(0, 0); border-radius: 0; width: 100%; height: 100%; } .slider-cs .slider-item:nth-child(3){ left: 60%; } .slider-cs .slider-item:nth-child(4){ left: calc(60% + 180px); } .slider-cs .slider-item:nth-child(5){ left: calc(60% + 360px); } .slider-cs .slider-item:nth-child(n + 6){ left: calc(60% + 540px); opacity: 0; } .slider-item .content-cs{ position: absolute; top: 50%; left: 100px; width: 33%; text-align: left; color: #eee; transform: translate(0, -50%); font-family: system-ui; display: none; } .slider-cs .slider-item:nth-child(2) .content-cs{ display: block; } .content-cs .title-item{ font-size: 36px; text-transform: uppercase; font-weight: bold; opacity: 0; animation: animate 1s ease-in-out 1 forwards; } .content-cs .mota-item{ margin-top: 10px; margin-bottom: 20px; opacity: 0; animation: animate 1s ease-in-out 0.3s 1 forwards; } .content-cs .links-item { padding: 5px 15px; cursor: pointer; opacity: 0; animation: animate 1s ease-in-out 0.6s 1 forwards; width: max-content; background: #fff; border-radius: 5px; font-weight: 500; text-transform: uppercase; font-size: 14px; } .button-cs{ width: 100%; left:100px; position: absolute; bottom: 20px; } .button-cs button { width: 36px; height: 36px; border-radius: 5px; cursor: pointer; margin: 0 5px; border: 1px solid #000; transition: 0.3s; background:#fff; } .button-cs button i { display: flex; justify-content: center; align-items: center; } .button-cs button:hover{ background: #ababab; color: #fff; } .progress-sub-container { margin: 0 10px; z-index: 60; display: flex; align-items: center; position: absolute; bottom: 20px; left: 220px; width: 33%; height: 36px; } .progress-sub-background { width: 100%; height: 3px; background-color: #ffffff33; } .progress-sub-foreground { height: 3px; background-color: #fff; } .slide-numbers { width: auto; height: 48px; overflow: hidden; font-size: 36px; position: relative; font-weight: bold; color: transparent !important; -webkit-text-stroke: 1px #fff; bottom: 20px; left: calc(33% + 250px); } @keyframes animate { from{ opacity: 0; transform: translate(0, 100px); filter: blur(33px); } to{ opacity: 1; transform: translate(0); filter: blur(0); } } |
Bước 6: Hiển thị Slider trên trang
- Mở trang hoặc bài viết mà bạn muốn hiển thị Slider.
- Thêm shortcode [slider_cs] vào vị trí mong muốn.
Qua bài viết này, Muathemewp giá rẻ đã hướng dẫn cách:
- Tạo nhóm trường dữ liệu tùy chỉnh bằng ACF.
- Sử dụng PHP, CSS, và JavaScript để xây dựng Slider động.
- Hiển thị Slider trên website và tối ưu hóa nó cho SEO và hiệu suất.
Hãy áp dụng hướng dẫn này để tạo Slider chuyên nghiệp, tăng trải nghiệm người dùng và làm nổi bật nội dung quan trọng trên trang web của bạn. Nếu bạn gặp khó khăn, đừng ngần ngại đặt câu hỏi! Cảm ơn các bạn nhiều nhé.
- Sharecode plugin bộ lọc khoảng giá cho wordpress không cần plugin
- Hướng Dẫn Tạo Popup Đăng Nhập Thành Công Bằng SweetAlert2 Trong WordPress
- Cách thay thế nội dung vĩnh viễn trong WordPress mà không cần plugin
- Cách Code Thông Báo Bằng Sweet2 WordPress
- Kho Theme WordPress Giá Rẻ – Đẳng Cấp, Chuyên Nghiệp, Phong Phú