Trong Ux Builder của Flatssome, đôi khi bạn muốn gọi 1 Menu nào đó, thì thường bỏ menu đó vào widget rồi gọi Widget Area ra. Ở các phiên bản sau , Flatsome có phát triển Element Menu , tuy nhiên phải điền link và text của từng link rất mất công. Ở dưới đây mình đã viết sẵn các Element Menu để giúp mình gọi các Menu ra ngoài nhanh hơn.
Element 1:
Gọi 1 Menu ra bên ngoài. Sẽ thêm 1 Element tên là Menu Danh mục, mình sẽ chọn menu để hiển thị ra bên ngoài:
function devvn_ux_builder_menu_element(){
// Lấy danh sách menu có sẵn trong WordPress
$menus = wp_get_nav_menus();
if ( ! empty( $menus ) ) { // Kiểm tra nếu có menu
foreach ( $menus as $menu ) {
$menu_options[ $menu->term_id ] = $menu->name;
$menu_options[''] = __('No menus found', 'flatsome'); // Thêm tùy chọn nếu không có menu
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_menu', array(
'name' => __('Menu danh mục', 'flatsome'),
'category' => __('Content', 'flatsome'),
'heading' => __('Select Menu', 'flatsome'),
'options' => $menu_options, // Hiển thị danh sách menu
'container_class' => array(
'type' => 'textfield', // Đảm bảo dùng đúng kiểu dữ liệu
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'placeholder' => __('custom-class', 'flatsome'),
add_action('ux_builder_setup', 'devvn_ux_builder_menu_element');
// Tạo shortcode để hiển thị menu được chọn
function devvn_menu_func($atts){
$atts = shortcode_atts(array(
// Kiểm tra nếu menu ID tồn tại
if ( ! empty( $atts['menu_id'] ) ) {
return wp_nav_menu( array(
'menu' => $atts['menu_id'],
'container_class' => esc_attr( $atts['container_class'] ),
return 'No menu selected.';
add_shortcode('devvn_menu', 'devvn_menu_func');
function devvn_ux_builder_menu_element(){
// Lấy danh sách menu có sẵn trong WordPress
$menu_options = array();
$menus = wp_get_nav_menus();
if ( ! empty( $menus ) ) { // Kiểm tra nếu có menu
foreach ( $menus as $menu ) {
$menu_options[ $menu->term_id ] = $menu->name;
}
} else {
$menu_options[''] = __('No menus found', 'flatsome'); // Thêm tùy chọn nếu không có menu
}
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_menu', array(
'name' => __('Menu danh mục', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'menu_id' => array(
'type' => 'select',
'heading' => __('Select Menu', 'flatsome'),
'options' => $menu_options, // Hiển thị danh sách menu
'default' => '',
),
'container_class' => array(
'type' => 'textfield', // Đảm bảo dùng đúng kiểu dữ liệu
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_menu_element');
// Tạo shortcode để hiển thị menu được chọn
function devvn_menu_func($atts){
$atts = shortcode_atts(array(
'menu_id' => '',
'container_class' => '',
), $atts);
// Kiểm tra nếu menu ID tồn tại
if ( ! empty( $atts['menu_id'] ) ) {
return wp_nav_menu( array(
'menu' => $atts['menu_id'],
'container' => 'div',
'container_class' => esc_attr( $atts['container_class'] ),
'echo' => false,
));
}
return 'No menu selected.';
}
add_shortcode('devvn_menu', 'devvn_menu_func');
function devvn_ux_builder_menu_element(){
// Lấy danh sách menu có sẵn trong WordPress
$menu_options = array();
$menus = wp_get_nav_menus();
if ( ! empty( $menus ) ) { // Kiểm tra nếu có menu
foreach ( $menus as $menu ) {
$menu_options[ $menu->term_id ] = $menu->name;
}
} else {
$menu_options[''] = __('No menus found', 'flatsome'); // Thêm tùy chọn nếu không có menu
}
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_menu', array(
'name' => __('Menu danh mục', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'menu_id' => array(
'type' => 'select',
'heading' => __('Select Menu', 'flatsome'),
'options' => $menu_options, // Hiển thị danh sách menu
'default' => '',
),
'container_class' => array(
'type' => 'textfield', // Đảm bảo dùng đúng kiểu dữ liệu
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_menu_element');
// Tạo shortcode để hiển thị menu được chọn
function devvn_menu_func($atts){
$atts = shortcode_atts(array(
'menu_id' => '',
'container_class' => '',
), $atts);
// Kiểm tra nếu menu ID tồn tại
if ( ! empty( $atts['menu_id'] ) ) {
return wp_nav_menu( array(
'menu' => $atts['menu_id'],
'container' => 'div',
'container_class' => esc_attr( $atts['container_class'] ),
'echo' => false,
));
}
return 'No menu selected.';
}
add_shortcode('devvn_menu', 'devvn_menu_func');
Element 2:
Sẽ tạo ra 1 element tên Danh mục sản phẩm, khi gọi ra, chọn danh mục sản phẩm cho nó, nó sẽ show danh mục hiện tại và các danh mục con của nó:
unction devvn_ux_builder_product_categories_element(){
// Đăng ký element cho UX Builder với ô tìm kiếm danh mục sản phẩm
add_ux_builder_shortcode('devvn_product_categories', array(
'name' => __('Danh mục sản phẩm - Dùng cho menu header', 'flatsome'),
'category' => __('Content', 'flatsome'),
'heading' => __('Select Product Category', 'flatsome'),
'placeholder' => __( 'Select product category..', 'flatsome' ),
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
'container_class' => array(
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'placeholder' => __('custom-class', 'flatsome'),
add_action('ux_builder_setup', 'devvn_ux_builder_product_categories_element');
function devvn_product_categories_func($atts){
$atts = shortcode_atts(array(
// Kiểm tra nếu danh mục sản phẩm được chọn
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
// Lấy đường dẫn đến trang danh mục sản phẩm
$category_link = get_term_link($term);
if ( is_wp_error( $category_link ) ) {
return 'Invalid category link.';
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
$output .= '<a href="' . esc_url( $category_link ) . '" class="parent-category">' . esc_html( $term->name ) . '</a>';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục hiện tại
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="child-categories">';
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a></li>';
return 'No product category selected.';
add_shortcode('devvn_product_categories', 'devvn_product_categories_func');
unction devvn_ux_builder_product_categories_element(){
// Đăng ký element cho UX Builder với ô tìm kiếm danh mục sản phẩm
add_ux_builder_shortcode('devvn_product_categories', array(
'name' => __('Danh mục sản phẩm - Dùng cho menu header', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'category_id' => array(
'type' => 'select',
'heading' => __('Select Product Category', 'flatsome'),
'full_width' => true,
'config' => array(
'placeholder' => __( 'Select product category..', 'flatsome' ),
'termSelect' => array(
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
),
),
),
'container_class' => array(
'type' => 'textfield',
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_product_categories_element');
function devvn_product_categories_func($atts){
$atts = shortcode_atts(array(
'category_id' => '',
'container_class' => '',
), $atts);
// Kiểm tra nếu danh mục sản phẩm được chọn
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
}
// Lấy đường dẫn đến trang danh mục sản phẩm
$category_link = get_term_link($term);
if ( is_wp_error( $category_link ) ) {
return 'Invalid category link.';
}
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
$output .= '<a href="' . esc_url( $category_link ) . '" class="parent-category">' . esc_html( $term->name ) . '</a>';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục hiện tại
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
));
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="child-categories">';
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a></li>';
}
$output .= '</ul>';
}
$output .= '</div>';
return $output;
}
return 'No product category selected.';
}
add_shortcode('devvn_product_categories', 'devvn_product_categories_func');
unction devvn_ux_builder_product_categories_element(){
// Đăng ký element cho UX Builder với ô tìm kiếm danh mục sản phẩm
add_ux_builder_shortcode('devvn_product_categories', array(
'name' => __('Danh mục sản phẩm - Dùng cho menu header', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'category_id' => array(
'type' => 'select',
'heading' => __('Select Product Category', 'flatsome'),
'full_width' => true,
'config' => array(
'placeholder' => __( 'Select product category..', 'flatsome' ),
'termSelect' => array(
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
),
),
),
'container_class' => array(
'type' => 'textfield',
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_product_categories_element');
function devvn_product_categories_func($atts){
$atts = shortcode_atts(array(
'category_id' => '',
'container_class' => '',
), $atts);
// Kiểm tra nếu danh mục sản phẩm được chọn
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
}
// Lấy đường dẫn đến trang danh mục sản phẩm
$category_link = get_term_link($term);
if ( is_wp_error( $category_link ) ) {
return 'Invalid category link.';
}
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
$output .= '<a href="' . esc_url( $category_link ) . '" class="parent-category">' . esc_html( $term->name ) . '</a>';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục hiện tại
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
));
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="child-categories">';
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a></li>';
}
$output .= '</ul>';
}
$output .= '</div>';
return $output;
}
return 'No product category selected.';
}
add_shortcode('devvn_product_categories', 'devvn_product_categories_func');
Elenemt 3:
Sẽ tạo ra element tên là Danh mục con và cháu. Khi thêm và chọn danh mục , nó sẽ hiện ra danh mục con và cháu của danh mục đã gọi:
function devvn_ux_builder_child_categories_element() {
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_child_categories', array(
'name' => __('Danh mục con và cháu', 'flatsome'),
'category' => __('Content', 'flatsome'),
'heading' => __('Select Parent Category', 'flatsome'),
'placeholder' => __( 'Select product parent category...', 'flatsome' ),
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
'container_class' => array(
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'placeholder' => __('custom-class', 'flatsome'),
add_action('ux_builder_setup', 'devvn_ux_builder_child_categories_element');
function devvn_child_categories_func($atts) {
$atts = shortcode_atts(array(
'category_id' => '', // Nhập danh mục cha
// Kiểm tra nếu danh mục cha được nhập
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục cha
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="menu">'; // Thẻ ul với class "menu" cho danh mục con
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
// Lấy danh sách danh mục cháu của từng danh mục con
$grandchild_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $child_category->term_id, // Lấy danh mục cháu của danh mục con
// Tạo li cho danh mục con
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a>';
// Nếu có danh mục cháu, thêm ul với class "menu-child"
if ( ! empty( $grandchild_categories ) && ! is_wp_error( $grandchild_categories ) ) {
$output .= '<ul class="sub-menu">'; // Thẻ ul với class "menu-child" cho danh mục cháu
foreach ( $grandchild_categories as $grandchild_category ) {
$grandchild_category_link = get_term_link( $grandchild_category );
$output .= '<li><a href="' . esc_url( $grandchild_category_link ) . '" class="grandchild-category">' . esc_html( $grandchild_category->name ) . '</a></li>';
$output .= '</ul>'; // Đóng ul menu-child
$output .= '</li>'; // Đóng li của danh mục con
$output .= '</ul>'; // Đóng ul menu
$output .= '</div>'; // Đóng container
return 'No product category selected.';
add_shortcode('devvn_child_categories', 'devvn_child_categories_func');
function devvn_ux_builder_child_categories_element() {
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_child_categories', array(
'name' => __('Danh mục con và cháu', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'category_id' => array(
'type' => 'select',
'heading' => __('Select Parent Category', 'flatsome'),
'full_width' => true,
'config' => array(
'placeholder' => __( 'Select product parent category...', 'flatsome' ),
'termSelect' => array(
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
),
),
),
'container_class' => array(
'type' => 'textfield',
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_child_categories_element');
function devvn_child_categories_func($atts) {
$atts = shortcode_atts(array(
'category_id' => '', // Nhập danh mục cha
'container_class' => '',
), $atts);
// Kiểm tra nếu danh mục cha được nhập
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
}
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục cha
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
));
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="menu">'; // Thẻ ul với class "menu" cho danh mục con
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
// Lấy danh sách danh mục cháu của từng danh mục con
$grandchild_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $child_category->term_id, // Lấy danh mục cháu của danh mục con
'hide_empty' => false,
));
// Tạo li cho danh mục con
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a>';
// Nếu có danh mục cháu, thêm ul với class "menu-child"
if ( ! empty( $grandchild_categories ) && ! is_wp_error( $grandchild_categories ) ) {
$output .= '<ul class="sub-menu">'; // Thẻ ul với class "menu-child" cho danh mục cháu
foreach ( $grandchild_categories as $grandchild_category ) {
$grandchild_category_link = get_term_link( $grandchild_category );
$output .= '<li><a href="' . esc_url( $grandchild_category_link ) . '" class="grandchild-category">' . esc_html( $grandchild_category->name ) . '</a></li>';
}
$output .= '</ul>'; // Đóng ul menu-child
}
$output .= '</li>'; // Đóng li của danh mục con
}
$output .= '</ul>'; // Đóng ul menu
}
$output .= '</div>'; // Đóng container
return $output;
}
return 'No product category selected.';
}
add_shortcode('devvn_child_categories', 'devvn_child_categories_func');
function devvn_ux_builder_child_categories_element() {
// Đăng ký element cho UX Builder
add_ux_builder_shortcode('devvn_child_categories', array(
'name' => __('Danh mục con và cháu', 'flatsome'),
'category' => __('Content', 'flatsome'),
'priority' => 1,
'options' => array(
'category_id' => array(
'type' => 'select',
'heading' => __('Select Parent Category', 'flatsome'),
'full_width' => true,
'config' => array(
'placeholder' => __( 'Select product parent category...', 'flatsome' ),
'termSelect' => array(
'taxonomies' => array( 'product_cat' ), // Chỉ tìm kiếm danh mục sản phẩm
),
),
),
'container_class' => array(
'type' => 'textfield',
'heading' => __('Container Class', 'flatsome'),
'description' => __('Enter a custom class for the container.', 'flatsome'),
'default' => '',
'placeholder' => __('custom-class', 'flatsome'),
),
),
));
}
add_action('ux_builder_setup', 'devvn_ux_builder_child_categories_element');
function devvn_child_categories_func($atts) {
$atts = shortcode_atts(array(
'category_id' => '', // Nhập danh mục cha
'container_class' => '',
), $atts);
// Kiểm tra nếu danh mục cha được nhập
if ( ! empty( $atts['category_id'] ) ) {
$term = get_term( $atts['category_id'], 'product_cat' );
if ( is_wp_error( $term ) || !$term ) {
return 'Invalid product category.';
}
// Tạo HTML cho danh mục cha
$output = '<div class="' . esc_attr( $atts['container_class'] ) . '">';
// Lấy danh sách danh mục con
$child_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $term->term_id, // Lấy danh mục con của danh mục cha
'hide_empty' => false, // Hiển thị cả danh mục không có sản phẩm
));
if ( ! empty( $child_categories ) && ! is_wp_error( $child_categories ) ) {
$output .= '<ul class="menu">'; // Thẻ ul với class "menu" cho danh mục con
foreach ( $child_categories as $child_category ) {
$child_category_link = get_term_link( $child_category );
// Lấy danh sách danh mục cháu của từng danh mục con
$grandchild_categories = get_terms( array(
'taxonomy' => 'product_cat',
'parent' => $child_category->term_id, // Lấy danh mục cháu của danh mục con
'hide_empty' => false,
));
// Tạo li cho danh mục con
$output .= '<li><a href="' . esc_url( $child_category_link ) . '" class="child-category">' . esc_html( $child_category->name ) . '</a>';
// Nếu có danh mục cháu, thêm ul với class "menu-child"
if ( ! empty( $grandchild_categories ) && ! is_wp_error( $grandchild_categories ) ) {
$output .= '<ul class="sub-menu">'; // Thẻ ul với class "menu-child" cho danh mục cháu
foreach ( $grandchild_categories as $grandchild_category ) {
$grandchild_category_link = get_term_link( $grandchild_category );
$output .= '<li><a href="' . esc_url( $grandchild_category_link ) . '" class="grandchild-category">' . esc_html( $grandchild_category->name ) . '</a></li>';
}
$output .= '</ul>'; // Đóng ul menu-child
}
$output .= '</li>'; // Đóng li của danh mục con
}
$output .= '</ul>'; // Đóng ul menu
}
$output .= '</div>'; // Đóng container
return $output;
}
return 'No product category selected.';
}
add_shortcode('devvn_child_categories', 'devvn_child_categories_func');