/** * Handle identifying the template parts to use and trigger loading those parts * * @param string $layout Optional parameter to specify a specific layout to use */ public function add_template_parts($layout = '') { if ('' == $layout) { if (!wds_page_builder_get_option('parts_saved_layouts') && (!is_page() || wds_page_builder_get_option('post_types') && !in_array(get_post_type(), wds_page_builder_get_option('post_types')))) { return; } } $post_id = is_singular() ? get_queried_object()->ID : 0; $parts = get_post_meta($post_id, '_wds_builder_template', true); $global_parts = wds_page_builder_get_option('parts_global_templates'); $saved_layouts = wds_page_builder_get_option('parts_saved_layouts'); $registered_layouts = get_option('wds_page_builder_layouts'); // if there are no parts saved for this post, no global parts, no saved layouts, and no layout passed to the action if (!$parts && !$global_parts && !$saved_layouts && $layout == '') { return; } // if a layout was passed or a layout is being used by default for this post type, we're going to check that first if (!$parts && $saved_layouts || !$parts && $registered_layouts) { // check if the layout requested is one that was registered if ($registered_layouts) { $saved_layouts = $registered_layouts; } // loop through the saved layouts, we'll check for the one we're looking for foreach ($saved_layouts as $saved_layout) { // is the layout the one that was named or one that was set for this post type? if (isset($saved_layout['layouts_name']) && $layout == $saved_layout['layouts_name']) { $parts = array(); foreach ($saved_layout['template_group'] as $template_group) { $parts[] = array('template_group' => $template_group); } } elseif (isset($saved_layout['default_layout']) && is_array($saved_layout['default_layout']) && in_array(get_post_type($post_id), $saved_layout['default_layout'])) { // loop through the template parts and prepare the $parts variable for the load_template_part method foreach ($saved_layout['template_group'] as $template_group) { $parts[] = array('template_group' => $template_group); } // end template part loop } // end layout check } // end saved layouts loop } elseif (!$parts || in_array('none', $parts[0])) { $parts = $global_parts; } // loop through each part and load the template parts if (is_array($parts)) { foreach ($parts as $part) { $this->load_template_part($part); } } }
/** * Get a list of the template parts in the current theme, return them * in an array. * * @return array An array of template parts */ function wds_page_builder_get_parts() { $parts = array(); $parts_dir = wds_page_builder_get_option('parts_dir') ? trailingslashit(get_stylesheet_directory()) . wds_page_builder_get_option('parts_dir') : get_stylesheet_directory() . '/parts'; $parts_prefix = wds_page_builder_get_option('parts_prefix') ? wds_page_builder_get_option('parts_prefix') : 'part'; // add a generic 'none' option $parts['none'] = __('- No Template Parts -', 'wds-simple-page-builder'); foreach (glob($parts_dir . '/' . $parts_prefix . '-*.php') as $part) { $part_slug = str_replace(array($parts_dir . '/' . $parts_prefix . '-', '.php'), '', $part); $parts[$part_slug] = ucwords(str_replace('-', ' ', $part_slug)); } if (empty($parts)) { return __('No template parts found', 'wds-simple-page-builder'); } return $parts; }