get('Tags');
//print_r($theme);
//echo $theme->get('Tags').' Get option';
$theme_dir = get_template_directory();
$conf = $theme_dir.'/pagelayer.conf';
//echo get_template_directory();
// Pagelayer based template ?
if(file_exists($conf)){
$pagelayer->cache['template'] = 1;
$pagelayer->template_conf = @json_decode(file_get_contents($conf), true);
// Not a pagelayer theme
}else{
return;
}
// ORDER of preference of every template
// 1) POST ID as per conditions - Only Premium
// 2) TPL file if there - Free and Premium when pagelayer.conf
// 3) PHP file if no Posts - Free and Premium
// Filter to finally INCLUDE and render our template
add_filter('template_include', 'pagelayer_template_include', 1000, 1);
}
// Handle the template files if any
// NOTE : This has a priority of 100 while the posts based pagelayer_builder_template_redirect has a priority of 10
// If there are any post based templates, then that is given priority
add_action( 'template_redirect', 'pagelayer_template_redirect', 100);
function pagelayer_template_redirect(){
global $pagelayer, $post;
// If no conf, then we dont have to do anything
if(empty($pagelayer->template_conf)){
return;
}
// If post template was not there, search for a header PGL file
// Also when we are editing, we can render header only when its a pagelayer-content edit
if(
(empty($pagelayer->template_editor) || @$pagelayer->template_editor == 'pagelayer-content')
&& empty($pagelayer->template_header)
){
$pagelayer->template_header = pagelayer_template_try_to_apply('header');
}
// If post template was not there, search for a header PGL file
// Also when we are editing, we cannot render the template file as post is being rendered
if(empty($pagelayer->template_editor) && empty($pagelayer->template_post)){
// Singular style posts
if ( is_singular() || is_404() ) {
$pagelayer->template_post = pagelayer_template_try_to_apply('single');
// Archive style posts
} elseif ( is_archive() || is_home() || is_search() ) {
$pagelayer->template_post = pagelayer_template_try_to_apply('archive');
}
}
// If post template was not there, search for a footer PGL file
// Also when we are editing, we can render footer only when its a pagelayer-content edit
if(
(empty($pagelayer->template_editor) || @$pagelayer->template_editor == 'pagelayer-content')
&& empty($pagelayer->template_footer)
){
$pagelayer->template_footer = pagelayer_template_try_to_apply('footer');
}
// If we do have a header but not the footer or we have the footer and no header,
// then we need to make sure to blank the other
if(!empty($pagelayer->template_header) || !empty($pagelayer->template_footer)){
// If the post being shown to the user is not a Pagelayer post, then we need to enqueue forcefully
if(empty($pagelayer->cache['enqueue_frontend'])){
pagelayer_enqueue_frontend(true);
}
add_action('get_header', 'pagelayer_get_header');
add_action('get_footer', 'pagelayer_get_footer');
}
}
// Is our template being rendered
function pagelayer_template_include($template){
global $pagelayer;
// Is there any post templates OR are we editing a pagelayer-template ?
if(!empty($pagelayer->template_post) || !empty($pagelayer->template_editor)){
$template = $pagelayer->template_post;
}
// Its our template OR are we editing a pagelayer-template, then render it
if(pathinfo($template, PATHINFO_EXTENSION) == 'pgl' || !empty($pagelayer->template_post) || !empty($pagelayer->template_editor)){
get_header();
echo '
';
pagelayer_template_render($template);
echo '
';
get_footer();
return false;
}
// Just return the original template if its not our file
return $template;
}
// Expects the file to include or the POST ID
function pagelayer_template_render($template){
global $pagelayer;
// $template can be blank, e.g. blank header / footer
if(empty($template)){
return;
}
if(is_numeric($template)){
echo pagelayer_get_post_content($template);
}else{
echo do_shortcode(file_get_contents(get_template_directory().'/'.$template.'.pgl'));
}
}
// For check which template will be applied
function pagelayer_template_try_to_apply($type){
global $pagelayer;
// Get templates id by type
$ids = [];
// Find the templates by type
foreach($pagelayer->template_conf as $k => $v){
if($v['type'] == $type){
$ids[] = $k;
}
}
$file = pagelayer_template_check_conditons($ids, true);
if( !empty($ids) && !empty($file) ){
return $file;
}
return false;
}
// Check conditions of template post ids / template files
function pagelayer_template_check_conditons($ids = [], $file = false){
global $pagelayer;
$selected_templs = [];
foreach( $ids as $id ){
$priority = 0;
$selected_template = 0;
$exclude_check = 1;
// File based
if($file){
$pagelayer_template_conditions = $pagelayer->template_conf[$id]['conditions'];
// Post Template based
}else{
$pagelayer_template_conditions = get_post_meta( $id, 'pagelayer_template_conditions', true );
}
if( !empty($pagelayer_template_conditions) ){
foreach( $pagelayer_template_conditions as $condi ){
$check = 0;
// Get template array
$tmpl_array = pagelayer_multi_array_search( $pagelayer->builder['dispay_on'], $condi['template'] );
// Get sub_template array
$sub_tmpl_array = pagelayer_multi_array_search( $pagelayer->builder[$condi['template'].'_templates'], $condi['sub_template']);
// If the condition name is general priority
if(empty($condi['template'])){
$check = 1;
$set_prio = 1; // Set General Property 1
// If the condition name is singular
}elseif( array_key_exists('check_conditions', $tmpl_array) ){
// If the condition callback is false, continue the loop
if( is_callable($tmpl_array['check_conditions']) ){
if( empty($tmpl_array['check_conditions']($condi)) ){
continue;
}
}elseif( empty($tmpl_array['check_conditions']) ){
continue;
}
// Check sub_template conditions
if( empty($condi['sub_template']) ){
$check = 1;
$set_prio = 2; // Set all sub_template Property 2
}elseif( array_key_exists('check_conditions', $sub_tmpl_array ) ){
// If the condition callback is false, continue the loop
if( is_callable($sub_tmpl_array['check_conditions']) ){
if( empty($sub_tmpl_array['check_conditions']($condi)) ){
continue;
}
}elseif( empty($sub_tmpl_array['check_conditions']) ){
continue;
}
$check = 1;
if( !empty($condi['id']) ){
$set_prio = 4; // Set id Property 4
}else{
$set_prio = 3;// Set sub_template Property 3
// If no id section then Property
if($sub_tmpl_array['no_id_section']){ $set_prio = 4; }
}
}
}
// IF is set to the exclude then
if($condi['type'] == 'exclude' && $check){
$exclude_check = 0;
}
if($check){
// If the template is valid for apply
$selected_template = $check;
// Set priority
if($priority < $set_prio){ $priority = $set_prio; }
}
}
}
// Set priority to template id
if( $selected_template && $exclude_check ){
$selected_templs[$id] = $priority;
}
}
$gprior = 0;
$sel_id = '';
foreach( $selected_templs as $id => $prior ){
if($gprior <= $prior){
$gprior = $prior;
$sel_id = $id;
}
}
return $sel_id;
}
// The header to substitute
function pagelayer_get_header($name) {
global $pagelayer;
// Output default header always if we have a header or footer
?>
>
>
template_header)){
echo '
';
// Render the content
pagelayer_template_render($pagelayer->template_header);
echo '
';
}
// Avoid running wp_head hooks again
remove_all_actions('wp_head');
$templates = [];
$name = (string) $name;
if ($name !== '') {
$templates[] = 'header-'.$name.'.php';
}
$templates[] = 'header.php';
// Since, we already outputted our header, we need to do a locate_template for the existing theme
// This is because, locate_template has the 3rd param as require once, so in the get_header
// the header.php will not load again
ob_start();
locate_template( $templates, true );
ob_get_clean();
}
// The footer to load
function pagelayer_get_footer($name) {
global $pagelayer;
// Output our content
if(!empty($pagelayer->template_footer)){
echo '
';
}
// Output default footer always if we have a header or footer
wp_footer();
echo '
';
// Avoid running wp_footer hooks again
remove_all_actions( 'wp_footer' );
$templates = [];
$name = (string) $name;
if ($name !== '') {
$templates[] = 'footer-'.$name.'.php';
}
$templates[] = 'footer.php';
// Since, we already outputted our footer, we need to do a locate_template for the existing theme
// This is because, locate_template has the 3rd param as require once, so in the get_header
// the footer.php will not load again
ob_start();
locate_template( $templates, true );
ob_get_clean();
}
// Any sidebar to load ?
function pagelayer_get_sidebar($name) {
global $pagelayer;
// Output our content
if(!empty($pagelayer->template_sidebar)){
pagelayer_template_render($pagelayer->template_sidebar);
}
$templates = [];
$name = (string) $name;
if ($name !== '') {
$templates[] = 'sidebar-'.$name.'.php';
}
$templates[] = 'sidebar.php';
// Since, we already outputted our sidebar, we need to do a locate_template for the existing theme
// This is because, locate_template has the 3rd param as require once, so in the get_header
// the sidebar.php will not load again
ob_start();
locate_template( $templates, true );
ob_get_clean();
}
// Get the custom post content by id
function pagelayer_get_post_content($id){
global $pagelayer;
// Get the content
$post = get_post($id);
$content = $post->post_content;
pagelayer_load_shortcodes();
//$content = do_shortcode( $content );
$content = apply_filters( 'the_content', $content );
$content = str_replace( ']]>', ']]>', $content );
return $content;
}
// Vars that can be used in template files
function pagelayer_template_vars(){
$replacers['{{theme_url}}'] = get_stylesheet_directory_uri();
$replacers['{{theme_images}}'] = get_stylesheet_directory_uri().'/images/';
$replacers['{{themes_dir}}'] = dirname(get_stylesheet_directory_uri());
$replacers['{{pl_site_url}}'] = home_url();
return $replacers;
}