Dashboard
PHP:
8.1.33
OS:
Linux
User:
lawtemple
/
/
home
/
www
/
lawtemplefirm.com
/
wp-content
/
themes
/
law-temple-theme
/
inc
📤 Upload
📝 New File
📁 New Folder
Close
Editing: helpers.php
<?php if(!defined('ABSPATH'))exit; function lt_theme_core_option($key,$fallback=''){return function_exists('lt_core_option')?lt_core_option($key,$fallback):$fallback;} function lt_theme_firm_name(){return function_exists('lt_core_get_firm_name')?lt_core_get_firm_name():get_bloginfo('name');} function lt_theme_logo($context='primary'){$map=array('primary'=>'logo_primary','alt'=>'logo_alt','light'=>'logo_light','dark'=>'logo_dark','sticky'=>'logo_sticky','mobile'=>'logo_mobile','footer'=>'logo_footer');$id=isset($map[$context])?absint(lt_theme_option($map[$context])):0;if(!$id&&'primary'!==$context)$id=absint(lt_theme_option('logo_primary'));if($id)return wp_get_attachment_image($id,'full',false,array('class'=>'lt-logo-img','loading'=>'eager','decoding'=>'async'));if(has_custom_logo()){ob_start();the_custom_logo();return ob_get_clean();}return '<span class="lt-site-name">'.esc_html(lt_theme_firm_name()).'</span>'; } function lt_theme_selected_posts($key,$type,$count){$ids=function_exists('lt_core_csv_ids')?lt_core_csv_ids(lt_theme_option($key)):array();$args=array('post_type'=>$type,'post_status'=>'publish','posts_per_page'=>$count,'orderby'=>'menu_order title','order'=>'ASC');if($ids){$args['post__in']=$ids;$args['orderby']='post__in';$args['posts_per_page']=-1;}return get_posts($args);} function lt_theme_section_keys($order_key='home_order',$disabled_key='home_disabled'){$order=array_filter(array_map('sanitize_key',explode(',',(string)lt_theme_option($order_key))));$disabled=array_filter(array_map('sanitize_key',explode(',',(string)lt_theme_option($disabled_key))));return array_values(array_diff($order,$disabled));} function lt_theme_breadcrumbs($force=false){if((!$force&&!lt_theme_option('breadcrumbs'))||is_front_page())return;echo '<nav class="lt-breadcrumbs" aria-label="'.esc_attr__('Breadcrumb','law-temple-theme').'"><a href="'.esc_url(home_url('/')).'">'.esc_html(lt_theme_option('breadcrumb_home')).'</a><span aria-hidden="true">'.esc_html(lt_theme_option('breadcrumb_separator')).'</span><span aria-current="page">'.esc_html(wp_get_document_title()).'</span></nav>';} function lt_theme_card_image($post_id,$size='lt-card',$priority=false){if(!has_post_thumbnail($post_id))return '';return get_the_post_thumbnail($post_id,$size,array('loading'=>$priority?'eager':'lazy','fetchpriority'=>$priority?'high':'auto','decoding'=>'async'));} function lt_theme_get_active_hero_slides(){if(!post_type_exists('hero_slide'))return array();$slides=get_posts(array('post_type'=>'hero_slide','post_status'=>'publish','posts_per_page'=>-1,'orderby'=>'menu_order date','order'=>'ASC','meta_query'=>array(array('key'=>'lt_enabled','value'=>'1'))));$today=current_time('Y-m-d');return array_values(array_filter($slides,function($s)use($today){$start=get_post_meta($s->ID,'lt_start_date',true);$end=get_post_meta($s->ID,'lt_end_date',true);return (!$start||$start<=$today)&&(!$end||$end>=$today);}));} function lt_theme_related_query($post_type,$ids,$limit=6){if(!$ids)return array();return get_posts(array('post_type'=>$post_type,'post_status'=>'publish','post__in'=>$ids,'orderby'=>'post__in','posts_per_page'=>$limit));} function lt_theme_social_share(){if(!lt_theme_option('social_sharing')||!is_singular('insight'))return;$url=rawurlencode(get_permalink());$title=rawurlencode(get_the_title());echo '<nav class="lt-share" aria-label="'.esc_attr__('Share this insight','law-temple-theme').'"><a target="_blank" rel="noopener" href="https://www.linkedin.com/sharing/share-offsite/?url='.$url.'">LinkedIn</a><a target="_blank" rel="noopener" href="https://www.facebook.com/sharer/sharer.php?u='.$url.'">Facebook</a><a target="_blank" rel="noopener" href="https://twitter.com/intent/tweet?url='.$url.'&text='.$title.'">X</a><button type="button" data-copy-link="'.esc_url(get_permalink()).'">'.esc_html__('Copy link','law-temple-theme').'</button><a href="mailto:?subject='.$title.'&body='.$url.'">'.esc_html__('Email','law-temple-theme').'</a></nav>';} function lt_theme_render_practice_section($section,$id){ if('overview'===$section&&trim(get_post_field('post_content',$id))){echo '<section class="lt-section" id="practice-overview"><div class="lt-container lt-two-col"><div><div class="lt-kicker">'.esc_html__('Overview','law-temple-theme').'</div><h2>'.esc_html(get_the_title($id)).'</h2></div><div class="lt-prose">'.apply_filters('the_content',get_post_field('post_content',$id)).'</div></div></section>';return;} if(in_array($section,array('services','capabilities'),true)){$legacy_key='services'===$section?'lt_services':'lt_capabilities';$structured_key='services'===$section?'lt_services_structured':'lt_capabilities_structured';$records=function_exists('lt_core_get_structured_records')?lt_core_get_structured_records($id,$structured_key):array();$v=trim((string)get_post_meta($id,$legacy_key,true));if(!$records&&!$v)return;$items=$records?$records:array_map(static fn($item)=>array('title'=>$item,'description'=>''),array_filter(array_map('trim',preg_split('/\r\n|\r|\n/',$v))));echo '<section class="lt-section '.('services'===$section?'lt-section--surface':'').'" id="practice-'.esc_attr($section).'"><div class="lt-container"><div class="lt-kicker">'.esc_html('services'===$section?__('Services','law-temple-theme'):__('Capabilities','law-temple-theme')).'</div><h2>'.esc_html(ucfirst($section)).'</h2><div class="lt-grid" style="--lt-columns:2">';foreach($items as $item){$title=$item['title']??'';$desc=$item['description']??'';if(!$title&&!$desc)continue;echo '<div class="lt-card">'.($title?'<h3>'.esc_html($title).'</h3>':'').($desc?'<p>'.esc_html($desc).'</p>':'').'</div>';}echo '</div></div></section>';return;} if('sectors'===$section){$terms=wp_get_post_terms($id,'sector');if(is_wp_error($terms)||!$terms)return;echo '<section class="lt-section" id="practice-sectors"><div class="lt-container"><h2>'.esc_html__('Relevant sectors','law-temple-theme').'</h2><div class="lt-grid">';foreach($terms as $t)echo '<a class="lt-card" href="'.esc_url(get_term_link($t)).'"><h3>'.esc_html($t->name).'</h3></a>';echo '</div></div></section>';return;} if('lawyers'===$section){$posts=function_exists('lt_core_related_lawyers_for_practice')?lt_core_related_lawyers_for_practice($id):array();if(!$posts)return;echo '<section class="lt-section lt-section--surface" id="practice-lawyers"><div class="lt-container"><h2>'.esc_html__('Key contacts','law-temple-theme').'</h2><div class="lt-grid" style="--lt-columns:4">';foreach($posts as $p)echo '<article class="lt-card"><a href="'.esc_url(get_permalink($p)).'">'.(has_post_thumbnail($p)?'<div class="lt-person-portrait">'.get_the_post_thumbnail($p,'lt-portrait').'</div>':'').'<div class="lt-card-meta">'.esc_html(get_post_meta($p->ID,'lt_role',true)).'</div><h3>'.esc_html($p->post_title).'</h3></a></article>';echo '</div></div></section>';return;} if(in_array($section,array('matters','insights','faq'),true)){if('matters'===$section){$ids=function_exists('lt_core_get_related_ids')?lt_core_get_related_ids($id,'lt_matter_ids'):array();$type='matter';$title=__('Representative matters','law-temple-theme');}elseif('insights'===$section){$ids=function_exists('lt_core_get_related_ids')?lt_core_get_related_ids($id,'lt_insight_ids'):array();if(!$ids&&function_exists('lt_core_relationship_query')){$q=lt_core_relationship_query('insight','lt_practice_ids',$id,6);$posts=$q->posts;}else$posts=lt_theme_related_query('insight',$ids,6);$type='insight';$title=__('Related insights','law-temple-theme');}else{$ids=function_exists('lt_core_get_related_ids')?lt_core_get_related_ids($id,'lt_faq_ids'):array();$type='lt_faq';$title=__('Frequently asked questions','law-temple-theme');}if(!isset($posts))$posts=lt_theme_related_query($type,$ids,6);if(!$posts)return;echo '<section class="lt-section '.('insights'===$section?'lt-section--surface':'').'" id="practice-'.esc_attr($section).'"><div class="lt-container"><h2>'.esc_html($title).'</h2>';if('faq'===$section){echo '<div class="lt-accordion">';foreach($posts as $p){$pid='faq-'.$p->ID;echo '<div class="lt-accordion-item"><button class="lt-accordion-button" data-accordion-button aria-expanded="false" aria-controls="'.esc_attr($pid).'">'.esc_html($p->post_title).'<span>+</span></button><div class="lt-accordion-panel" id="'.esc_attr($pid).'" hidden>'.apply_filters('the_content',$p->post_content).'</div></div>';}echo '</div>';}else{echo '<div class="lt-grid">';foreach($posts as $p)echo '<article class="lt-card"><h3><a href="'.esc_url(get_permalink($p)).'">'.esc_html($p->post_title).'</a></h3><p>'.esc_html(get_the_excerpt($p)).'</p></article>';echo '</div>';}echo '</div></section>';unset($posts);return;} if('contact'===$section){$heading=get_post_meta($id,'lt_cta_heading',true)?:__('Discuss this area with us','law-temple-theme');$desc=get_post_meta($id,'lt_cta_description',true);$label=get_post_meta($id,'lt_cta_label',true)?:__('Contact the Firm','law-temple-theme');$url=get_post_meta($id,'lt_cta_url',true);if(!$url&&($p=get_page_by_path('contact')))$url=get_permalink($p);echo '<section class="lt-section" id="practice-contact"><div class="lt-container lt-cta"><h2>'.esc_html($heading).'</h2>'.($desc?'<p>'.esc_html($desc).'</p>':'').($url?'<a class="lt-button lt-button--light" href="'.esc_url($url).'">'.esc_html($label).'</a>':'').'</div></section>';} } /** Inline style for administrator-configured homepage module background. */ function lt_theme_home_section_style( $section ) { $color = sanitize_hex_color( lt_theme_option( 'home_' . sanitize_key( $section ) . '_bg' ) ); return $color ? 'background-color:' . $color . ';' : ''; } /** v3.0.0 structured professional-profile helpers with legacy fallbacks. */ function lt_theme_professional_records( $post_id, $key ) { return function_exists( 'lt_core_get_professional_records' ) ? lt_core_get_professional_records( $post_id, $key ) : array(); } function lt_theme_render_professional_records( $records, $primary_keys = array() ) { if ( ! $records ) { return; } echo '<ul class="lt-professional-records">'; foreach ( $records as $row ) { $primary = ''; foreach ( $primary_keys as $key ) { if ( ! empty( $row[$key] ) ) { $primary = $row[$key]; break; } } $meta = array(); foreach ( $row as $key => $value ) { if ( '' === trim( (string) $value ) || in_array( $key, $primary_keys, true ) || 'description' === $key || 'url' === $key ) { continue; } $meta[] = $value; } echo '<li>'; if ( $primary ) { echo '<strong>' . esc_html( $primary ) . '</strong>'; } if ( ! empty( $row['description'] ) ) { echo '<span>' . esc_html( $row['description'] ) . '</span>'; } if ( $meta ) { echo '<span class="lt-professional-records__meta">' . esc_html( implode( ' · ', $meta ) ) . '</span>'; } if ( ! empty( $row['url'] ) ) { echo '<a class="lt-text-link" href="' . esc_url( $row['url'] ) . '" rel="noopener">' . esc_html__( 'View publication', 'law-temple-theme' ) . ' →</a>'; } echo '</li>'; } echo '</ul>'; } /** Return true only when a lawyer profile section has content worth rendering. */ function lt_theme_profile_section_has_content( $section, $id ) { switch ( $section ) { case 'biography': return (bool) trim( (string) get_post_field( 'post_content', $id ) ); case 'practice': return function_exists( 'lt_core_get_related_ids' ) && (bool) lt_core_get_related_ids( $id, 'lt_practice_ids' ); case 'sector': $terms = wp_get_post_terms( $id, 'sector' ); return ! is_wp_error( $terms ) && ! empty( $terms ); case 'experience': return (bool) lt_theme_professional_records( $id, 'lt_experience_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_experience', true ) ); case 'qualifications': return (bool) lt_theme_professional_records( $id, 'lt_qualifications_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_qualifications', true ) ); case 'education': return (bool) lt_theme_professional_records( $id, 'lt_education_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_education', true ) ); case 'bar': return (bool) lt_theme_professional_records( $id, 'lt_bar_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_bar_admission', true ) ); case 'memberships': return (bool) lt_theme_professional_records( $id, 'lt_memberships_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_memberships', true ) ); case 'languages': return (bool) lt_theme_professional_records( $id, 'lt_languages_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_languages', true ) ); case 'matters': if ( lt_theme_professional_records( $id, 'lt_profile_matters_structured' ) || trim( (string) get_post_meta( $id, 'lt_representative_matters', true ) ) ) { return true; } return function_exists( 'lt_core_relationship_query' ) && lt_core_relationship_query( 'matter', 'lt_lawyer_ids', $id, 1 )->have_posts(); case 'awards': if ( lt_theme_professional_records( $id, 'lt_profile_awards_structured' ) || trim( (string) get_post_meta( $id, 'lt_awards_text', true ) ) ) { return true; } return function_exists( 'lt_core_relationship_query' ) && lt_core_relationship_query( 'award', 'lt_lawyer_ids', $id, 1 )->have_posts(); case 'publications': return (bool) lt_theme_professional_records( $id, 'lt_publications_structured' ) || (bool) trim( (string) get_post_meta( $id, 'lt_publications_text', true ) ); case 'insights': return function_exists( 'lt_core_relationship_query' ) && lt_core_relationship_query( 'insight', 'lt_lawyer_ids', $id, 1 )->have_posts(); case 'downloads': return (bool) absint( get_post_meta( $id, 'lt_cv_id', true ) ); case 'contact': return (bool) ( get_post_meta( $id, 'lt_email', true ) || get_post_meta( $id, 'lt_phone', true ) || get_post_meta( $id, 'lt_mobile', true ) || get_post_meta( $id, 'lt_linkedin', true ) ); } return true; } /** Manually selected related insights take precedence; otherwise match by practice. */ function lt_theme_related_insights_for_insight( $id, $limit = 3 ) { $manual = function_exists( 'lt_core_get_related_ids' ) ? lt_core_get_related_ids( $id, 'lt_related_ids' ) : array(); if ( $manual ) { return lt_theme_related_query( 'insight', $manual, $limit ); } $practices = function_exists( 'lt_core_get_related_ids' ) ? lt_core_get_related_ids( $id, 'lt_practice_ids' ) : array(); if ( ! $practices ) { return array(); } if ( function_exists( 'lt_core_relationship_source_ids' ) && function_exists( 'lt_core_relationship_table_exists' ) && lt_core_relationship_table_exists() ) { $ids = array(); foreach ( $practices as $pid ) { $ids = array_merge( $ids, lt_core_relationship_source_ids( 'insight', 'lt_practice_ids', $pid, 0 ) ); } $ids = array_values( array_diff( array_unique( array_map( 'absint', $ids ) ), array( absint( $id ) ) ) ); if ( ! $ids ) { return array(); } return get_posts( array( 'post_type'=>'insight', 'post_status'=>'publish', 'post__in'=>$ids, 'posts_per_page'=>$limit, 'orderby'=>'date', 'order'=>'DESC' ) ); } $mq = array( 'relation' => 'OR' ); foreach ( $practices as $pid ) { $mq[] = array( 'key'=>'lt_practice_ids', 'value'=>'(^|,)' . absint( $pid ) . '(,|$)', 'compare'=>'REGEXP' ); } return get_posts( array( 'post_type'=>'insight', 'post_status'=>'publish', 'post__not_in'=>array($id), 'posts_per_page'=>$limit, 'meta_query'=>$mq, 'orderby'=>'date', 'order'=>'DESC' ) ); } /** * Render a published synced pattern (wp_block) as a hybrid template part. * Returns an empty string when the record is unavailable or not published. */ function lt_theme_render_synced_pattern( $post_id ) { $post_id = absint( $post_id ); if ( ! $post_id || 'wp_block' !== get_post_type( $post_id ) || 'publish' !== get_post_status( $post_id ) ) { return ''; } $content = (string) get_post_field( 'post_content', $post_id ); if ( '' === trim( $content ) ) { return ''; } return do_blocks( $content ); }
Save
Cancel