<?php /** * Default API hooks. * * @package WP_Ultimo * @subpackage API * @since 2.0.0 */ namespace WP_Ultimo; // Exit if accessed directly defined('ABSPATH') || exit; /** * Adds a lighter ajax option to WP Multisite WaaS. * * @since 1.9.14 */ class Views { use \WP_Ultimo\Traits\Singleton; /** * Adds hooks to be added at the original instantiation. * * @since 1.9.0 */ public function init(): void { add_filter('wu_view_override', [$this, 'view_override'], 10, 3); } /** * Custom locate template function that allows us to retrieve user overridden templates. * * This custom function is necessary instead of using locate_template because we need to retrieve * templates while we still don't have the STYLESHEETPATH constant defined nor the TEMPLATEPATH constant. * * @todo Can this be improved? Do we need to re-check the Template Path in here? Not sure... * * @since 1.9.0 * @param string|array $template_names Template file(s) to search for, in order. * @param bool $load If true the template file will be loaded if it is found. * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. * @return string The template filename if one is located. */ public function custom_locate_template($template_names, $load = false, $require_once = true) { is_multisite() && switch_to_blog(get_current_site()->blog_id); $stylesheet_path = get_stylesheet_directory(); is_multisite() && restore_current_blog(); $located = ''; foreach ((array) $template_names as $template_name) { if ( ! $template_name) { continue; } if (file_exists($stylesheet_path . '/' . $template_name)) { $located = $stylesheet_path . '/' . $template_name; break; } elseif (file_exists(get_template_directory() . '/' . $template_name)) { $located = get_template_directory() . '/' . $template_name; break; } elseif (file_exists(ABSPATH . WPINC . '/theme-compat/' . $template_name)) { $located = ABSPATH . WPINC . '/theme-compat/' . $template_name; break; } } if ($load && '' !== $located) { load_template($located, $require_once); } return $located; } /** * Check if an alternative view exists and override * * @param string $original_path The original path of the view. * @param string $view View path. * @return string The new path. */ public function view_override($original_path, $view) { $found = $this->custom_locate_template("wp-ultimo/$view.php"); return $found ?: $original_path; } }