class MegaMenuController {
const OPTION_KEY = MegaMenuRegister::OPTION_KEY;
const MODULE_KEY = MegaMenuRegister::MODULE_KEY;
const MODULE_TITLE = MegaMenuRegister::MODULE_TITLE;
const MODULE_DESC = MegaMenuRegister::MODULE_DESC;
public static function init() {
add_action('wp_enqueue_scripts', [self::class, 'enqueueAssets']);
add_shortcode('tva_mega_menu', [self::class, 'shortcodeRender']);
}
public static function shortcodeRender($atts = [], $content = null) {
$view_path = __DIR__ . '/templates/frontend.php';
ob_start();
if (file_exists($view_path)) {
include $view_path;
} else {
echo '
Không tìm thấy file giao diện
';
}
return ob_get_clean();
}
public static function renderPage() {
$view_path = __DIR__ . '/templates/settings.php';
if (file_exists($view_path)) {
$content = (function () use ($view_path) {
ob_start();
include $view_path;
return ob_get_clean();
})();
} else {
$content = 'Không tìm thấy file giao diện
';
}
echo tva_render_module(self::MODULE_TITLE, self::MODULE_DESC, $content);
}
public static function get_settings() {
$options = get_option(self::OPTION_KEY, []);
return $options[self::MODULE_KEY] ?? [];
}
public static function save_settings($data) {
$options = get_option(self::OPTION_KEY, []);
$options[self::MODULE_KEY] = $data;
update_option(self::OPTION_KEY, $options);
}
/**
* Lấy danh sách danh mục cha + con, có trường priority (từ settings nếu có)
*/
public static function get_categories($args = []) {
$default_args = [
'taxonomy' => 'product_cat',
'hide_empty' => false,
'parent' => 0,
'orderby' => 'name',
'order' => 'ASC',
];
$top_categories = get_terms(array_merge($default_args, $args));
$settings = self::get_settings();
$priorities = $settings['priorities'] ?? [];
$result = [];
foreach ($top_categories as $parent_cat) {
// Ưu tiên: nếu có trong settings thì dùng, không thì mặc định 0
$parent_cat->priority = intval($priorities[$parent_cat->term_id] ?? 0);
$children = get_terms([
'taxonomy' => $parent_cat->taxonomy,
'hide_empty' => false,
'parent' => $parent_cat->term_id,
'orderby' => 'name',
'order' => 'ASC',
]);
foreach ($children as &$child) {
$child->priority = 0; // nếu muốn sau này thêm cấu hình cho con thì thay đổi tại đây
}
$result[] = [
'parent' => $parent_cat,
'children' => $children,
];
}
return $result;
}
public static function enqueueAssets($hook_suffix) {
$name = 'mega-menu';
wp_enqueue_style(
'tva-' . $name . '-css',
TVA_WP_URL . 'assets/css/modules/' . $name . '.css',
[],
filemtime(TVA_WP_DIR . 'assets/css/modules/' . $name . '.css') . TVA_WP_VERSION
);
wp_enqueue_script(
'tva-' . $name . '-js',
TVA_WP_URL . 'assets/js/modules/' . $name . '.js',
['jquery'],
filemtime(TVA_WP_DIR . 'assets/js/modules/' . $name . '.js') . TVA_WP_VERSION,
true
);
}
}
Phụ kiện vận chuyển & di động - Hoàng Hà IE Tools
Phụ kiện vận chuyển & di động