/** * Buzzetric Theme - functions.php * Enqueues built React assets + CPT portfolio fields */ // Theme Support function buzzetric_setup() { add_theme_support('title-tag'); add_theme_support('post-thumbnails'); } add_action('after_setup_theme', 'buzzetric_setup'); // Google Fonts function buzzetric_add_fonts() { echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; } add_action('wp_head', 'buzzetric_add_fonts', 1); // Enqueue the built React app function buzzetric_enqueue_scripts() { $js_file = get_template_directory() . '/dist/assets/main.js'; $css_file = get_template_directory() . '/dist/assets/main.css'; if (file_exists($css_file)) { wp_enqueue_style( 'buzzetric-style', get_template_directory_uri() . '/dist/assets/main.css', array(), filemtime($css_file) ); } if (file_exists($js_file)) { wp_enqueue_script( 'buzzetric-main', get_template_directory_uri() . '/dist/assets/main.js', array(), filemtime($js_file), true ); } } add_action('wp_enqueue_scripts', 'buzzetric_enqueue_scripts'); // Make the script a module (required for Vite/React) function buzzetric_script_type_module($tag, $handle, $src) { if ($handle === 'buzzetric-main') { $tag = ''; } return $tag; } add_filter('script_loader_tag', 'buzzetric_script_type_module', 10, 3); // Pass Portfolio data to React via window.wpData function buzzetric_localize_acf_data() { $portfolio_items = array(); // Fetch from Custom Post Type instead of Options Repeater $args = array( 'post_type' => 'portfolio', 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC' ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $id = get_the_ID(); $img_url = get_the_post_thumbnail_url($id, 'large'); // Fallback for demo items if no image is uploaded yet if (!$img_url) { $manual_img = get_field('portfolio_image', $id); if ($manual_img) { $img_url = is_array($manual_img) ? $manual_img['url'] : wp_get_attachment_url($manual_img); } } // Hard fallback to theme assets for the 3 bootstrapped items if no image is found if (!$img_url) { $slug = get_post_field('post_name', $id); $theme_uri = get_template_directory_uri(); if ($slug === 'repair-all-360') $img_url = $theme_uri . '/dist/assets/repairall.jpg'; if ($slug === 'castco-steel') $img_url = $theme_uri . '/dist/assets/castco.jpg'; if ($slug === 'al-sahara-transport') $img_url = $theme_uri . '/dist/assets/sahara.jpg'; } $portfolio_items[] = array( 'title' => get_the_title(), 'short_text' => get_field('short_description', $id) ?: get_the_excerpt(), 'image' => $img_url, 'button_link'=> get_field('website_url', $id) ?: '#', ); } wp_reset_postdata(); } $data = array('portfolio' => $portfolio_items); echo ''; } add_action('wp_head', 'buzzetric_localize_acf_data'); /** * Register Portfolio Custom Post Type */ function buzzetric_register_portfolio_cpt() { $labels = array( 'name' => 'Portfolios', 'singular_name' => 'Portfolio', 'menu_name' => 'Portfolios', 'add_new' => 'Add New', 'add_new_item' => 'Add New Portfolio', 'edit_item' => 'Edit Portfolio', 'new_item' => 'New Portfolio', 'view_item' => 'View Portfolio', ); $args = array( 'labels' => $labels, 'public' => true, 'has_archive' => false, 'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), 'menu_icon' => 'dashicons-portfolio', 'rewrite' => array('slug' => 'portfolio'), 'show_in_rest' => true, ); register_post_type('portfolio', $args); } add_action('init', 'buzzetric_register_portfolio_cpt'); // Register ACF fields for Portfolio CPT function buzzetric_register_portfolio_fields() { if (!function_exists('acf_add_local_field_group')) return; acf_add_local_field_group(array( 'key' => 'group_portfolio_details', 'title' => 'Portfolio Details', 'fields' => array( array( 'key' => 'field_short_description', 'label' => 'Short Description', 'name' => 'short_description', 'type' => 'textarea', 'instructions' => 'Brief overview for the card display.', 'required' => 1, 'rows' => 2, ), array( 'key' => 'field_website_url', 'label' => 'Website URL', 'name' => 'website_url', 'type' => 'url', 'instructions' => 'Link to the live project.', 'placeholder' => 'https://example.com', ), ), 'location' => array( array( array( 'param' => 'post_type', 'operator' => '==', 'value' => 'portfolio', ), ), ), )); } add_action('acf/init', 'buzzetric_register_portfolio_fields'); /** * Bootstrap data: Creates Home page and sets it as front, adds 3 portfolio items */ function buzzetric_bootstrap_data() { if (get_option('buzzetric_data_bootstrapped')) return; // 1. Create Front Page for SEO Control $home_page = get_page_by_path('home'); if (!$home_page) { $home_id = wp_insert_post(array( 'post_title' => 'Home', 'post_name' => 'home', 'post_status' => 'publish', 'post_type' => 'page', )); } else { $home_id = $home_page->ID; } if ($home_id) { update_option('show_on_front', 'page'); update_option('page_on_front', $home_id); } // 2. Insert Default Portfolios (requires ACF to store metadata) if (function_exists('update_field')) { $defaults = array( // ... rest of the function remains the same ... array( 'title' => 'Repair All 360', 'desc' => 'A comprehensive service portal engineered for high conversion rates and instant repair bookings.', 'url' => 'https://repairall360.com/', ), array( 'title' => 'Castco Steel', 'desc' => 'An industrial and robust corporate presence built to showcase heavy manufacturing capabilities.', 'url' => 'https://castcosteel.com/', ), array( 'title' => 'Al Sahara Transport', 'desc' => 'A highly optimized refrigerated logistics platform with a focus on B2B lead generation.', 'url' => 'https://alsahararefrigeratedtransport.ae/', ) ); foreach ($defaults as $item) { $existing = get_page_by_title($item['title'], OBJECT, 'portfolio'); if (!$existing) { $post_id = wp_insert_post(array( 'post_title' => $item['title'], 'post_type' => 'portfolio', 'post_status' => 'publish', )); if ($post_id) { update_field('short_description', $item['desc'], $post_id); update_field('website_url', $item['url'], $post_id); // Note: Featured image should be manually set or we use theme fallback logic in localizer } } } update_option('buzzetric_data_bootstrapped', true); } add_action('admin_init', 'buzzetric_bootstrap_data'); https://buzzetric.com/wp-sitemap-posts-post-1.xmlhttps://buzzetric.com/wp-sitemap-posts-page-1.xmlhttps://buzzetric.com/wp-sitemap-taxonomies-category-1.xmlhttps://buzzetric.com/wp-sitemap-users-1.xml