| Server IP : 207.135.97.11 / Your IP : 172.19.0.1 Web Server : LiteSpeed System : Linux 6d372a2d2e33 5.14.0-611.24.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jan 23 11:42:43 UTC 2026 x86_64 User : nobody ( 65534) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/ed.net.au/wp-content/themes/evoke-dialogue/ |
Upload File : |
<?php
/**
* Theme functions for Evoke Dialogue.
*/
if (!defined('ABSPATH')) {
exit;
}
function evoke_dialogue_setup() {
add_theme_support('title-tag');
add_theme_support('post-thumbnails');
add_theme_support('html5', array('search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'style', 'script'));
register_nav_menus(
array(
'primary' => __('Primary Menu', 'evoke-dialogue'),
)
);
}
add_action('after_setup_theme', 'evoke_dialogue_setup');
function evoke_dialogue_register_legacy_post_types() {
$post_types = array(
'service' => 'Services',
'project' => 'Projects',
'member' => 'Team Members',
'client' => 'Clients',
'testimonial' => 'Testimonials',
);
foreach ($post_types as $slug => $label) {
register_post_type(
$slug,
array(
'labels' => array(
'name' => $label,
'singular_name' => rtrim($label, 's'),
),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => false,
'has_archive' => false,
'show_in_rest' => true,
'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'page-attributes'),
)
);
}
}
add_action('init', 'evoke_dialogue_register_legacy_post_types');
function evoke_dialogue_assets() {
wp_enqueue_style(
'evoke-dialogue-fonts',
'https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap',
array(),
null
);
wp_enqueue_style(
'evoke-dialogue-style',
get_stylesheet_uri(),
array('evoke-dialogue-fonts'),
wp_get_theme()->get('Version')
);
wp_enqueue_style(
'evoke-dialogue-fontawesome',
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css',
array(),
'4.7.0'
);
wp_enqueue_script(
'evoke-dialogue-theme',
get_template_directory_uri() . '/assets/theme.js',
array(),
wp_get_theme()->get('Version'),
true
);
}
add_action('wp_enqueue_scripts', 'evoke_dialogue_assets');
function evoke_dialogue_excerpt_length($length) {
return 22;
}
add_filter('excerpt_length', 'evoke_dialogue_excerpt_length', 99);
function evoke_dialogue_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'evoke_dialogue_excerpt_more');
function evoke_dialogue_service_icon_class($icon_slug) {
$raw = strtolower(trim((string) $icon_slug));
if (preg_match('/fa-[a-z0-9\-]+/', $raw, $matches)) {
return $matches[0];
}
$slug = str_replace(array('_', ' '), '-', $raw);
$slug = preg_replace('/-+/', '-', $slug);
$map = array(
'puzzle-piece' => 'fa-puzzle-piece',
'map-o' => 'fa-map-o',
'handshake-o' => 'fa-handshake-o',
'envelope-open-o' => 'fa-envelope-o',
'envelope-open' => 'fa-envelope-o',
'black-tie' => 'fa-black-tie',
'users' => 'fa-users',
);
if (isset($map[$slug])) {
return $map[$slug];
}
$slug = preg_replace('/[^a-z0-9\-]/', '', $slug);
if (strpos($slug, 'fa-') !== 0) {
$slug = 'fa-' . $slug;
}
return $slug;
}
function evoke_dialogue_try_attachment_image_url($maybe_id, $size = 'medium_large') {
$attachment_id = absint($maybe_id);
if ($attachment_id <= 0) {
return '';
}
$url = wp_get_attachment_image_url($attachment_id, $size);
if (!empty($url)) {
return $url;
}
$mime_type = get_post_mime_type($attachment_id);
if (is_string($mime_type) && strpos($mime_type, 'image/') === 0) {
$fallback = wp_get_attachment_url($attachment_id);
if (!empty($fallback)) {
return $fallback;
}
}
return '';
}
function evoke_dialogue_is_image_url($url) {
$path = (string) wp_parse_url((string) $url, PHP_URL_PATH);
return (bool) preg_match('/\.(avif|gif|jpe?g|png|svg|webp)$/i', $path);
}
function evoke_dialogue_meta_value_image_url($value, $size = 'medium_large') {
if (empty($value)) {
return '';
}
if (is_numeric($value)) {
return evoke_dialogue_try_attachment_image_url($value, $size);
}
if (is_string($value)) {
$trimmed = trim($value);
if ($trimmed === '') {
return '';
}
$unserialized = maybe_unserialize($trimmed);
if ($unserialized !== $trimmed) {
return evoke_dialogue_meta_value_image_url($unserialized, $size);
}
$decoded = json_decode($trimmed, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
return evoke_dialogue_meta_value_image_url($decoded, $size);
}
if (preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"]/i', $trimmed, $matches)) {
return esc_url_raw($matches[1]);
}
if (filter_var($trimmed, FILTER_VALIDATE_URL)) {
if (evoke_dialogue_is_image_url($trimmed) || strpos($trimmed, '/wp-content/uploads/') !== false) {
return esc_url_raw($trimmed);
}
return '';
}
if (strpos($trimmed, '/wp-content/uploads/') !== false) {
return esc_url_raw(home_url('/' . ltrim($trimmed, '/')));
}
return '';
}
if (is_array($value)) {
$priority_keys = array(
'id',
'ID',
'attachment_id',
'image_id',
'logo_id',
'thumbnail_id',
'url',
'src',
'image',
'logo',
'file',
);
foreach ($priority_keys as $key) {
if (isset($value[$key])) {
$candidate = evoke_dialogue_meta_value_image_url($value[$key], $size);
if (!empty($candidate)) {
return $candidate;
}
}
}
foreach ($value as $item) {
$candidate = evoke_dialogue_meta_value_image_url($item, $size);
if (!empty($candidate)) {
return $candidate;
}
}
}
return '';
}
function evoke_dialogue_meta_image_url($post_id, $size = 'medium_large') {
$all_meta = get_post_meta($post_id);
if (empty($all_meta)) {
return '';
}
$preferred_keys = array(
'_thumbnail_id',
'thumbnail_id',
'featured_image',
'featured_image_id',
'mt_services_image',
'mt-service-image',
'mt_project_image',
'mt-project-image',
'mt_member_image',
'mt-member-image',
'mt_member_photo',
'mt-member-photo',
'mt_client_logo',
'mt-client-logo',
'mt_client_image',
'mt-client-image',
'client_logo',
'logo',
'image',
);
foreach ($preferred_keys as $key) {
if (isset($all_meta[$key][0])) {
$candidate = evoke_dialogue_meta_value_image_url($all_meta[$key][0], $size);
if (!empty($candidate)) {
return $candidate;
}
}
}
foreach ($all_meta as $key => $values) {
if (!preg_match('/(image|logo|photo|thumb|thumbnail|banner|hero|avatar)/i', (string) $key)) {
continue;
}
foreach ((array) $values as $value) {
$candidate = evoke_dialogue_meta_value_image_url($value, $size);
if (!empty($candidate)) {
return $candidate;
}
}
}
return '';
}
function evoke_dialogue_first_image_url($post_id) {
$content = get_post_field('post_content', $post_id);
if (preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"]/i', (string) $content, $matches)) {
return $matches[1];
}
return '';
}
function evoke_dialogue_post_card_image($post_id, $size = 'medium_large') {
if (has_post_thumbnail($post_id)) {
return get_the_post_thumbnail($post_id, $size);
}
$image_url = evoke_dialogue_first_image_url($post_id);
if (empty($image_url)) {
$image_url = evoke_dialogue_meta_image_url($post_id, $size);
}
if (!empty($image_url)) {
return '<img src="' . esc_url($image_url) . '" alt="' . esc_attr(get_the_title($post_id)) . '">';
}
return '';
}
function evoke_dialogue_legacy_permalink($post_id) {
$post = get_post($post_id);
if (!$post) {
return '';
}
$legacy_types = array('project', 'service', 'member', 'client', 'testimonial');
if (in_array($post->post_type, $legacy_types, true)) {
return add_query_arg('p', (string) absint($post_id), home_url('/'));
}
return get_permalink($post_id);
}
if (!function_exists('evoke_dialogue_redirect_team_members_to_about_us')) {
function evoke_dialogue_redirect_team_members_to_about_us() {
if (is_admin()) {
return;
}
$request_uri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : '';
$path = trim((string) wp_parse_url($request_uri, PHP_URL_PATH), '/');
if ($path === 'team-members') {
wp_safe_redirect(home_url('/about-us/'), 301);
exit;
}
if ($path === 'recent-works') {
wp_safe_redirect(home_url('/case-outcomes/'), 301);
exit;
}
}
}
add_action('template_redirect', 'evoke_dialogue_redirect_team_members_to_about_us', 1);