{"id":476,"date":"2026-02-04T22:17:39","date_gmt":"2026-02-04T22:17:39","guid":{"rendered":"https:\/\/heartacademy.edu.vn\/?page_id=476"},"modified":"2026-03-08T21:27:11","modified_gmt":"2026-03-08T21:27:11","slug":"coursefree","status":"publish","type":"page","link":"https:\/\/heartacademy.edu.vn\/index.php\/coursefree\/","title":{"rendered":"CourseFree"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"476\" class=\"elementor elementor-476\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d6123eb e-con-full e-flex e-con e-parent\" data-id=\"d6123eb\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d994c25 elementor-widget elementor-widget-html\" data-id=\"d994c25\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n\r\n<html class=\"light\" lang=\"vi\"><head>\r\n<meta charset=\"utf-8\"\/>\r\n<meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\"\/>\r\n<title>Danh s\u00e1ch Kho\u00e1 h\u1ecdc Mi\u1ec5n ph\u00ed - Heart Academy<\/title>\r\n<script src=\"https:\/\/cdn.tailwindcss.com?plugins=forms,container-queries\"><\/script>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;500;600;700;800&amp;family=Public+Sans:wght@300;400;500;600;700&amp;display=swap\" rel=\"stylesheet\"\/>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap\" rel=\"stylesheet\"\/>\r\n<script id=\"tailwind-config\">\r\n        tailwind.config = {\r\n            darkMode: \"class\",\r\n            theme: {\r\n                extend: {\r\n                    colors: {\r\n                        \"primary\": \"#1E40AF\", \/\/ Royal Blue\r\n                        \"secondary\": \"#DC2626\", \/\/ Red\r\n                        \"background-light\": \"#f8f9fa\",\r\n                        \"background-dark\": \"#0f172a\",\r\n                    },\r\n                    fontFamily: {\r\n                        \"display\": [\"Montserrat\", \"sans-serif\"],\r\n                        \"body\": [\"Public Sans\", \"sans-serif\"]\r\n                    },\r\n                    borderRadius: {\r\n                        \"DEFAULT\": \"0.25rem\",\r\n                        \"lg\": \"0.5rem\",\r\n                        \"xl\": \"0.75rem\",\r\n                        \"full\": \"9999px\"\r\n                    },\r\n                },\r\n            },\r\n        }\r\n    <\/script>\r\n<style>\r\n        body {\r\n            font-family: 'Public Sans', sans-serif;\r\n        }\r\n        h1, h2, h3, h4, button {\r\n            font-family: 'Montserrat', sans-serif;\r\n        }\r\n        .fill-1 { font-variation-settings: 'FILL' 1; }\r\n    <\/style>\r\n<\/head>\r\n<body class=\"bg-background-light dark:bg-background-dark text-slate-900 dark:text-slate-100 antialiased\">\r\n<main class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12\">\r\n<!-- Header Section -->\r\n<div class=\"mb-10 text-center lg:text-left\">\r\n<h1 class=\"text-4xl font-800 text-primary dark:text-blue-400 tracking-tight mb-4\">Danh s\u00e1ch Kho\u00e1 h\u1ecdc Mi\u1ec5n ph\u00ed<\/h1>\r\n<p class=\"text-slate-600 dark:text-slate-400 text-lg max-w-2xl\">Kh\u00e1m ph\u00e1 th\u01b0 vi\u1ec7n ki\u1ebfn th\u1ee9c b\u1ea5t \u0111\u1ed9ng s\u1ea3n th\u1ef1c chi\u1ebfn c\u00f9ng Heart Academy. N\u00e2ng t\u1ea7m s\u1ef1 nghi\u1ec7p ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed.<\/p>\r\n<\/div>\r\n<!-- Search & Quick Filter Bar -->\r\n<div class=\"mb-8 flex flex-col md:flex-row gap-4 items-center justify-between\">\r\n<div class=\"relative w-full md:max-w-xl\">\r\n<span class=\"material-symbols-outlined absolute left-4 top-1\/2 -translate-y-1\/2 text-slate-400\">search<\/span>\r\n<input id=\"course-search\" class=\"w-full pl-12 pr-4 py-3 rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all shadow-sm\" placeholder=\"T\u00ecm ki\u1ebfm kh\u00f3a h\u1ecdc...\" type=\"text\"\/>\r\n<\/div>\r\n<div class=\"flex items-center gap-2 text-sm font-medium text-slate-500 whitespace-nowrap overflow-x-auto pb-2 md:pb-0 w-full md:w-auto\">\r\n<span>S\u1eafp x\u1ebfp:<\/span>\r\n<select id=\"course-sort\" class=\"bg-white dark:bg-slate-800 border-slate-200 dark:border-slate-700 rounded-lg py-2 px-4 focus:ring-primary\">\r\n<option value=\"date\">M\u1edbi nh\u1ea5t<\/option>\r\n<option value=\"title\">T\u00ean A-Z<\/option>\r\n<\/select>\r\n<\/div>\r\n<\/div>\r\n<div class=\"flex flex-col lg:flex-row gap-8\">\r\n<!-- Sidebar Filter -->\r\n<aside class=\"w-full lg:w-64 shrink-0\">\r\n<div class=\"bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm border border-slate-100 dark:border-slate-700 sticky top-8\">\r\n<div class=\"mb-8\">\r\n<h3 class=\"text-lg font-bold text-slate-900 dark:text-white mb-4 flex items-center gap-2\">\r\n<span class=\"material-symbols-outlined text-primary\">category<\/span>\r\n                            Danh m\u1ee5c\r\n                        <\/h3>\r\n<div id=\"category-filters\" class=\"space-y-3\">\r\n<label class=\"flex items-center gap-3 cursor-pointer group\">\r\n<input checked=\"\" class=\"w-5 h-5 rounded border-slate-300 text-primary focus:ring-primary category-checkbox\" type=\"checkbox\" value=\"all\"\/>\r\n<span class=\"text-slate-600 dark:text-slate-400 group-hover:text-primary transition-colors\">T\u1ea5t c\u1ea3<\/span>\r\n<\/label>\r\n<!-- Categories will be dynamically loaded -->\r\n<\/div>\r\n<\/div>\r\n<div class=\"mb-8\">\r\n<h3 class=\"text-lg font-bold text-slate-900 dark:text-white mb-4 flex items-center gap-2\">\r\n<span class=\"material-symbols-outlined text-secondary\">payments<\/span>\r\n                            H\u1ecdc ph\u00ed\r\n                        <\/h3>\r\n<div class=\"inline-flex items-center px-3 py-1 bg-secondary\/10 text-secondary rounded-full text-sm font-semibold\">\r\n                            Ch\u1ec9 hi\u1ec7n Mi\u1ec5n ph\u00ed\r\n                        <\/div>\r\n<\/div>\r\n<div>\r\n<h3 class=\"text-lg font-bold text-slate-900 dark:text-white mb-4 flex items-center gap-2\">\r\n<span class=\"material-symbols-outlined text-primary\">star<\/span>\r\n                            \u0110\u00e1nh gi\u00e1\r\n                        <\/h3>\r\n<div class=\"space-y-1\">\r\n<button id=\"filter-rating-5\" class=\"rating-btn flex items-center gap-2 p-2 -ml-2 rounded-lg hover:bg-slate-100 dark:hover:bg-slate-800 transition-colors w-full text-left opacity-60 hover:opacity-100\" onclick=\"setRatingFilter(5)\">\r\n<div class=\"flex text-yellow-500\">\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<\/div>\r\n<span class=\"text-sm text-slate-600 dark:text-slate-400 font-medium\">5 sao<\/span>\r\n<\/button>\r\n<button id=\"filter-rating-4\" class=\"rating-btn flex items-center gap-2 p-2 -ml-2 rounded-lg hover:bg-slate-100 dark:hover:bg-slate-800 transition-colors w-full text-left opacity-60 hover:opacity-100\" onclick=\"setRatingFilter(4)\">\r\n<div class=\"flex text-yellow-500\">\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined text-slate-300 text-[20px]\">star<\/span>\r\n<\/div>\r\n<span class=\"text-sm text-slate-600 dark:text-slate-400 font-medium\">T\u1eeb 4 sao<\/span>\r\n<\/button>\r\n<button id=\"filter-rating-3\" class=\"rating-btn flex items-center gap-2 p-2 -ml-2 rounded-lg hover:bg-slate-100 dark:hover:bg-slate-800 transition-colors w-full text-left opacity-60 hover:opacity-100\" onclick=\"setRatingFilter(3)\">\r\n<div class=\"flex text-yellow-500\">\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined fill-1 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined text-slate-300 text-[20px]\">star<\/span>\r\n<span class=\"material-symbols-outlined text-slate-300 text-[20px]\">star<\/span>\r\n<\/div>\r\n<span class=\"text-sm text-slate-600 dark:text-slate-400 font-medium\">T\u1eeb 3 sao<\/span>\r\n<\/button>\r\n<\/div>\r\n<\/div>\r\n\r\n<\/div>\r\n<\/aside>\r\n<!-- Main Content Grid -->\r\n<div class=\"flex-1\">\r\n<div id=\"course-grid\" class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6\">\r\n<!-- Course Cards will be dynamically loaded -->\r\n<div class=\"flex items-center justify-center col-span-full py-20\">\r\n    <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-primary\"><\/div>\r\n<\/div>\r\n<\/div>\r\n<!-- Pagination -->\r\n<div id=\"pagination\" class=\"mt-12 flex items-center justify-center gap-2\">\r\n<!-- Pagination will be dynamically loaded -->\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/main>\r\n\r\n<script>\r\n(function() {\r\n    'use strict';\r\n\r\n    const BASE = 'https:\/\/heartacademy.edu.vn\/wp-json\/wp\/v2';\r\n    const POST_TYPE = 'freecourse'; \r\n    const DETAIL_PAGE = 'detail.html';\r\n    const PER_PAGE = 6;\r\n    \r\n    let currentPage = 1;\r\n    let searchQuery = '';\r\n    let selectedCategories = [];\r\n    let sortBy = 'date';\r\n    let currentRatingFilter = 0; \/\/ Cache for client-side filtering\r\n    let allCoursesData = [];\r\n\r\n    const grid = document.getElementById('course-grid');\r\n    const pagination = document.getElementById('pagination');\r\n    const searchInput = document.getElementById('course-search');\r\n    const sortSelect = document.getElementById('course-sort');\r\n    const catContainer = document.getElementById('category-filters');\r\n\r\n    window.setRatingFilter = function(stars) {\r\n        if (currentRatingFilter === stars) {\r\n            currentRatingFilter = 0; \/\/ Toggle off if clicked again\r\n        } else {\r\n            currentRatingFilter = stars;\r\n        }\r\n        \r\n        document.querySelectorAll('.rating-btn').forEach(btn => {\r\n            btn.classList.add('opacity-60');\r\n            btn.classList.remove('bg-slate-100', 'dark:bg-slate-800');\r\n        });\r\n        \r\n        if (currentRatingFilter > 0) {\r\n            const activeBtn = document.getElementById('filter-rating-' + stars);\r\n            if (activeBtn) {\r\n                activeBtn.classList.remove('opacity-60');\r\n                activeBtn.classList.add('bg-slate-100', 'dark:bg-slate-800');\r\n            }\r\n        }\r\n\r\n        currentPage = 1;\r\n        applyClientFilters();\r\n    };\r\n\r\n    function getCourseRating(course) {\r\n        const acf = course.acf || {};\r\n        const tmpDiv = document.createElement('div');\r\n        tmpDiv.innerHTML = course.content.rendered;\r\n        const el = tmpDiv.querySelector('#card-data');\r\n        let cardData = {};\r\n        if (el) {\r\n            try { cardData = JSON.parse(el.textContent.replace(\/[\\u201C\\u201D\\u2033]\/g, '\"').replace(\/[\\u2018\\u2019]\/g, \"'\").replace(\/\\u2013\/g, '-')); } catch(e){}\r\n        }\r\n        return parseFloat(acf.course_rating || cardData.rating || (course.meta && course.meta.course_rating) || '0');\r\n    }\r\n\r\n    function applyClientFilters() {\r\n        let filtered = allCoursesData;\r\n        \r\n        if (currentRatingFilter > 0) {\r\n            filtered = filtered.filter(c => getCourseRating(c) >= currentRatingFilter);\r\n        }\r\n\r\n        const totalPages = Math.ceil(filtered.length \/ PER_PAGE) || 1;\r\n        const start = (currentPage - 1) * PER_PAGE;\r\n        const paginated = filtered.slice(start, start + PER_PAGE);\r\n\r\n        renderCourses(paginated);\r\n        renderPagination(totalPages);\r\n    }\r\n\r\n    function fetchCourses() {\r\n        grid.innerHTML = '<div class=\"flex items-center justify-center col-span-full py-20\"><div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-primary\"><\/div><\/div>';\r\n        \r\n        \/\/ Fetch up to 100 courses to allow client-side rating filtering across all potential pages\r\n        let url = `${BASE}\/${POST_TYPE}?per_page=100&_embed&status=publish`;\r\n        if (searchQuery) url += `&search=${encodeURIComponent(searchQuery)}`;\r\n        if (sortBy) url += `&orderby=${sortBy === 'title' ? 'title' : 'date'}&order=desc`;\r\n        if (selectedCategories.length > 0) url += `&categories=${selectedCategories.join(',')}`;\r\n\r\n        fetch(url)\r\n            .then(res => res.json().then(data => ({ data, ok: res.ok })))\r\n            .then(({ data, ok }) => {\r\n                if (!ok || !Array.isArray(data)) {\r\n                    const errorMsg = (data && data.message) ? data.message : 'D\u1eef li\u1ec7u kh\u00f4ng h\u1ee3p l\u1ec7 ho\u1eb7c kh\u00f4ng t\u00ecm th\u1ea5y post type.';\r\n                    throw new Error(errorMsg);\r\n                }\r\n                allCoursesData = data;\r\n                applyClientFilters();\r\n            })\r\n            .catch(err => {\r\n                console.error('Fetch Error:', err);\r\n                grid.innerHTML = `<div class=\"col-span-full text-center py-20 text-slate-500 px-4\">\r\n                    <p class=\"text-lg font-bold text-red-600 mb-2\">Kh\u00f4ng th\u1ec3 t\u1ea3i d\u1eef li\u1ec7u<\/p>\r\n                    <p class=\"mb-4 text-sm\">${err.message}<\/p>\r\n                <\/div>`;\r\n            });\r\n    }\r\n\r\n    function renderCourses(courses) {\r\n        if (!courses || courses.length === 0) {\r\n            grid.innerHTML = '<div class=\"col-span-full text-center py-20 text-slate-500\">Kh\u00f4ng t\u00ecm th\u1ea5y kh\u00f3a h\u1ecdc n\u00e0o.<\/div>';\r\n            return;\r\n        }\r\n\r\n        grid.innerHTML = courses.map(course => {\r\n            const acf = course.acf || {};\r\n            const embedded = course._embedded || {};\r\n            const media = (embedded['wp:featuredmedia'] || [])[0];\r\n            \r\n            \/\/ Parse hidden data from content\r\n            const tmpDiv = document.createElement('div');\r\n            tmpDiv.innerHTML = course.content.rendered;\r\n            function getHidden(id) {\r\n                const el = tmpDiv.querySelector('#' + id);\r\n                if (el) {\r\n                    try {\r\n                        \/\/ WordPress wptexturize converts \" to smart quotes - fix them\r\n                        let raw = el.textContent.replace(\/[\\u201C\\u201D\\u2033]\/g, '\"').replace(\/[\\u2018\\u2019]\/g, \"'\").replace(\/\\u2013\/g, '-');\r\n                        return JSON.parse(raw);\r\n                    } catch(e) { console.warn('Parse error for', id, e); }\r\n                }\r\n                return null;\r\n            }\r\n            const cardData = getHidden('card-data') || {};\r\n            \r\n            const img = acf.course_image || cardData.image || (media && media.source_url) || 'https:\/\/via.placeholder.com\/600x400?text=Heart+Academy';\r\n            const title = course.title.rendered;\r\n            const excerpt = course.excerpt.rendered.replace(\/<[^>]+>\/g, '').substring(0, 100) + '...';\r\n            \r\n            \/\/ Rating and Review Count - checking ACF -> content hidden data -> meta -> defaults\r\n            const rating = acf.course_rating || cardData.rating || (course.meta && course.meta.course_rating) || '5.0';\r\n            const reviewCount = acf.course_review_count || cardData.reviews || (course.meta && course.meta.course_review_count) || '0';\r\n            \r\n            return `\r\n                <div class=\"bg-white dark:bg-slate-800 rounded-xl overflow-hidden shadow-sm hover:shadow-xl transition-all duration-300 border border-slate-100 dark:border-slate-700 flex flex-col group\">\r\n                    <div class=\"relative aspect-video\">\r\n                        <div class=\"w-full h-full bg-cover bg-center transition-transform duration-500 group-hover:scale-110\" style=\"background-image: url('${img}')\"><\/div>\r\n                        <div class=\"absolute top-3 left-3 px-3 py-1 bg-secondary text-white text-[10px] font-bold rounded shadow-lg uppercase tracking-wider\">Mi\u1ec5n Ph\u00ed<\/div>\r\n                    <\/div>\r\n                    <div class=\"p-5 flex flex-col flex-1\">\r\n                        <h3 class=\"text-lg font-bold text-slate-900 dark:text-white mb-2 line-clamp-2 leading-tight group-hover:text-primary transition-colors\">${title}<\/h3>\r\n                        <p class=\"text-slate-600 dark:text-slate-400 text-sm mb-4 line-clamp-2 flex-1\">${excerpt}<\/p>\r\n                        <div class=\"flex items-center gap-2 mb-4\">\r\n                            <div class=\"flex text-yellow-500 scale-90 -ml-1\">\r\n                                <span class=\"material-symbols-outlined fill-1 text-[18px]\">star<\/span>\r\n                                <span class=\"material-symbols-outlined fill-1 text-[18px]\">star<\/span>\r\n                                <span class=\"material-symbols-outlined fill-1 text-[18px]\">star<\/span>\r\n                                <span class=\"material-symbols-outlined fill-1 text-[18px]\">star<\/span>\r\n                                <span class=\"material-symbols-outlined fill-1 text-[18px]\">star<\/span>\r\n                            <\/div>\r\n                            <span class=\"text-xs font-bold text-slate-700 dark:text-slate-200\">${rating}<\/span>\r\n                            <span class=\"text-xs text-slate-400\">(${reviewCount})<\/span>\r\n                        <\/div>\r\n                        <a href=\"${course.link}\" class=\"w-full py-3 bg-primary text-white rounded-lg font-semibold hover:bg-primary\/90 transition-colors flex items-center justify-center gap-2\">\r\n                            Xem chi ti\u1ebft\r\n                            <span class=\"material-symbols-outlined text-[18px]\">arrow_forward<\/span>\r\n                        <\/a>\r\n                    <\/div>\r\n                <\/div>\r\n            `;\r\n        }).join('');\r\n    }\r\n\r\n    function renderPagination(totalPages) {\r\n        if (totalPages <= 1) {\r\n            pagination.innerHTML = '';\r\n            return;\r\n        }\r\n\r\n        let html = '';\r\n        \/\/ Previous\r\n        html += `\r\n            <button class=\"w-10 h-10 rounded-lg flex items-center justify-center border border-slate-200 dark:border-slate-700 hover:bg-primary hover:text-white transition-all ${currentPage === 1 ? 'opacity-50 cursor-not-allowed' : ''}\" \r\n                    ${currentPage === 1 ? 'disabled' : ''} onclick=\"window.changePage(${currentPage - 1})\">\r\n                <span class=\"material-symbols-outlined text-[18px]\">chevron_left<\/span>\r\n            <\/button>\r\n        `;\r\n\r\n        \/\/ Pages\r\n        for (let i = 1; i <= totalPages; i++) {\r\n            if (i === 1 || i === totalPages || (i >= currentPage - 1 && i <= currentPage + 1)) {\r\n                html += `\r\n                    <button class=\"w-10 h-10 rounded-lg flex items-center justify-center font-bold transition-all ${i === currentPage ? 'bg-primary text-white shadow-md' : 'border border-slate-200 dark:border-slate-700 hover:bg-primary hover:text-white'}\" \r\n                            onclick=\"window.changePage(${i})\">${i}<\/button>\r\n                `;\r\n            } else if (i === currentPage - 2 || i === currentPage + 2) {\r\n                html += '<span class=\"px-2 text-slate-400 text-sm\">...<\/span>';\r\n            }\r\n        }\r\n\r\n        \/\/ Next\r\n        html += `\r\n            <button class=\"w-10 h-10 rounded-lg flex items-center justify-center border border-slate-200 dark:border-slate-700 hover:bg-primary hover:text-white transition-all ${currentPage === totalPages ? 'opacity-50 cursor-not-allowed' : ''}\" \r\n                    ${currentPage === totalPages ? 'disabled' : ''} onclick=\"window.changePage(${currentPage + 1})\">\r\n                <span class=\"material-symbols-outlined text-[18px]\">chevron_right<\/span>\r\n            <\/button>\r\n        `;\r\n\r\n        pagination.innerHTML = html;\r\n    }\r\n\r\n    window.changePage = function(page) {\r\n        currentPage = page;\r\n        applyClientFilters();\r\n        window.scrollTo({ top: 0, behavior: 'smooth' });\r\n    };\r\n\r\n    \/\/ Events\r\n    let searchTimer;\r\n    searchInput.addEventListener('input', (e) => {\r\n        clearTimeout(searchTimer);\r\n        searchTimer = setTimeout(() => {\r\n            searchQuery = e.target.value;\r\n            currentPage = 1;\r\n            fetchCourses();\r\n        }, 500);\r\n    });\r\n\r\n    sortSelect.addEventListener('change', (e) => {\r\n        sortBy = e.target.value;\r\n        currentPage = 1;\r\n        fetchCourses();\r\n    });\r\n\r\n    \/\/ Initial load\r\n    fetchCourses();\r\n})();\r\n<\/script>\r\n<\/body><\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Danh s\u00e1ch Kho\u00e1 h\u1ecdc Mi\u1ec5n ph\u00ed &#8211; Heart Academy Danh s\u00e1ch Kho\u00e1 h\u1ecdc Mi\u1ec5n ph\u00ed Kh\u00e1m ph\u00e1 th\u01b0 vi\u1ec7n ki\u1ebfn th\u1ee9c b\u1ea5t \u0111\u1ed9ng s\u1ea3n th\u1ef1c chi\u1ebfn c\u00f9ng Heart Academy. N\u00e2ng t\u1ea7m s\u1ef1 nghi\u1ec7p ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed. search S\u1eafp x\u1ebfp: M\u1edbi nh\u1ea5tT\u00ean A-Z category Danh m\u1ee5c T\u1ea5t c\u1ea3 payments H\u1ecdc ph\u00ed Ch\u1ec9 hi\u1ec7n Mi\u1ec5n ph\u00ed [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-476","page","type-page","status-publish","hentry"],"acf":{"hero_image":"https:\/\/heartacademy.edu.vn\/wp-content\/uploads\/2026\/02\/Picture16.png","hero_title_1":"Ki\u1ebfn t\u1ea1o t\u01b0\u01a1ng lai c\u00f9ng","hero_title_2":"Heart Academy","hero_description":"Gia nh\u1eadp \u0111\u1ed9i ng\u0169 nh\u1eefng chuy\u00ean gia \u0111am m\u00ea, n\u01a1i b\u1ea1n \u0111\u01b0\u1ee3c th\u1eed th\u00e1ch, ph\u00e1t tri\u1ec3n v\u00e0 \u0111\u1ecbnh h\u00ecnh t\u01b0\u01a1ng lai c\u1ee7a ng\u00e0nh marketing b\u1ea5t \u0111\u1ed9ng s\u1ea3n.","benefits_title":"T\u1ea1i sao ch\u1ecdn Heart Academy?","benefits_subtitle":"Ch\u00fang t\u00f4i kh\u00f4ng ch\u1ec9 x\u00e2y d\u1ef1ng s\u1ef1 nghi\u1ec7p, ch\u00fang t\u00f4i x\u00e2y d\u1ef1ng con ng\u01b0\u1eddi.","gallery_title":"Kho\u1ea3nh kh\u1eafc Heart Academy","cta_text":"Kh\u00f4ng t\u00ecm th\u1ea5y v\u1ecb tr\u00ed ph\u00f9 h\u1ee3p? H\u00e3y g\u1eedi CV c\u1ee7a b\u1ea1n v\u00e0o ng\u00e2n h\u00e0ng nh\u00e2n s\u1ef1."},"_links":{"self":[{"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/pages\/476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/comments?post=476"}],"version-history":[{"count":42,"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/pages\/476\/revisions"}],"predecessor-version":[{"id":1144,"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/pages\/476\/revisions\/1144"}],"wp:attachment":[{"href":"https:\/\/heartacademy.edu.vn\/index.php\/wp-json\/wp\/v2\/media?parent=476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}