/**
* 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