Ticket #13691: get_template_part.5.diff
File get_template_part.5.diff, 6.3 KB (added by , 14 years ago) |
---|
-
general-template.php
19 19 * @since 1.5.0 20 20 * @uses do_action() Calls 'get_header' action. 21 21 * 22 * @param string $name The name of the specialised header.22 * @param mixed $names The names of the specialised header templates (it can be a string, or an array of names to search for in priority order.). 23 23 */ 24 function get_header( $name = null) {25 do_action( 'get_header', $name );24 function get_header( $names = array() ) { 25 do_action( 'get_header', $names ); 26 26 27 $templates = array();28 if ( isset($name) )29 $templates[] = "header-{$name}.php";30 31 $templates[] = "header.php";32 33 27 // Backward compat code will be removed in a future release 34 if ('' == locate_template($templates, true))28 if ('' == get_template_part( 'header', $names, true ) ) 35 29 load_template( WPINC . '/theme-compat/header.php'); 36 30 } 37 31 … … 48 42 * @since 1.5.0 49 43 * @uses do_action() Calls 'get_footer' action. 50 44 * 51 * @param string $name The name of the specialised footer.45 * @param mixed $names The names of the specialised footer templates (it can be a string, or an array of names to search for in priority order.). 52 46 */ 53 function get_footer( $name = null ) {54 do_action( 'get_footer', $name );47 function get_footer( $names = null ) { 48 do_action( 'get_footer', $names ); 55 49 56 $templates = array();57 if ( isset($name) )58 $templates[] = "footer-{$name}.php";59 60 $templates[] = "footer.php";61 62 50 // Backward compat code will be removed in a future release 63 if ('' == locate_template($templates, true))51 if ('' == get_template_part( 'footer', $names, true ) ) 64 52 load_template( WPINC . '/theme-compat/footer.php'); 65 53 } 66 54 … … 77 65 * @since 1.5.0 78 66 * @uses do_action() Calls 'get_sidebar' action. 79 67 * 80 * @param string $name The name of the specialised sidebar.68 * @param mixed $names The names of the specialised sidebar templates (it can be a string, or an array of names to search for in priority order.). 81 69 */ 82 function get_sidebar( $name = null) {83 do_action( 'get_sidebar', $name );70 function get_sidebar( $names = array() ) { 71 do_action( 'get_sidebar', $names ); 84 72 85 $templates = array();86 if ( isset($name) )87 $templates[] = "sidebar-{$name}.php";88 89 $templates[] = "sidebar.php";90 91 73 // Backward compat code will be removed in a future release 92 if ('' == locate_template($templates, true))74 if ('' == get_template_part( 'sidebar', $names ) ) 93 75 load_template( WPINC . '/theme-compat/sidebar.php'); 94 76 } 95 77 … … 103 85 * specialised part will be included. If the theme contains no {slug}.php file 104 86 * then no template will be included. 105 87 * 106 * The template is included using require, not require_once, so you may include the107 * same template part multiple times.108 *109 88 * For the parameter, if the file is called "{slug}-special.php" then specify 110 89 * "special". 111 90 * 112 91 * @uses locate_template() 113 92 * @since 3.0.0 114 * @uses do_action() Calls 'get_template_part {$slug}' action.93 * @uses do_action() Calls 'get_template_part_{$slug}' action. 115 94 * 116 95 * @param string $slug The slug name for the generic template. 117 * @param string $name The name of the specialised template. 96 * @param mixed $names The names of the specialised templates (it can be a string, or an array of names to search for in priority order.). 97 * @param bool $require_once Where to require the template file once. Default is false. 98 * @return string The template filename if one is located. 118 99 */ 119 function get_template_part( $slug, $name = null) {120 do_action( "get_template_part_{$slug}", $slug, $name );121 100 function get_template_part( $slug, $names = array(), $require_once = false ) { 101 do_action( "get_template_part_{$slug}", $slug, $names ); 102 122 103 $templates = array(); 123 if ( isset($name) )104 foreach ( (array)$names as $name ) { 124 105 $templates[] = "{$slug}-{$name}.php"; 125 106 } 126 107 $templates[] = "{$slug}.php"; 127 108 128 locate_template($templates, true, false);109 return locate_template($templates, true, $require_once); 129 110 } 130 111 131 112 /** -
theme.php
1044 1044 function locate_template($template_names, $load = false, $require_once = true ) { 1045 1045 if ( !is_array($template_names) ) 1046 1046 return ''; 1047 1047 1048 1048 $located = ''; 1049 1049 foreach ( $template_names as $template_name ) { 1050 1050 if ( !$template_name ) 1051 1051 continue; 1052 if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {1052 if ( template_exists( STYLESHEETPATH, $template_name ) ) { 1053 1053 $located = STYLESHEETPATH . '/' . $template_name; 1054 1054 break; 1055 } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {1055 } else if ( TEMPLATEPATH != STYLESHEETPATH && template_exists( TEMPLATEPATH, $template_name ) ) { 1056 1056 $located = TEMPLATEPATH . '/' . $template_name; 1057 1057 break; 1058 1058 } … … 1065 1065 } 1066 1066 1067 1067 /** 1068 * Stores template files in the cache in global $wp_templates; 1069 * 1070 * @param string $dir Directory location to scan. 1071 * @return bool 1072 */ 1073 function wp_cache_templates( $dir ) { 1074 global $wp_templates; 1075 if ( $handle = opendir( $dir ) ) { 1076 $wp_templates[$dir] = 'dir'; 1077 while ( false !== ($file = readdir( $handle )) ) { 1078 if ( is_file( $dir.'/'.$file ) && $file != '.' && $file != '..' ) 1079 $wp_templates[$dir.'/'.$file] = true; 1080 } 1081 closedir( $handle ); 1082 return true; 1083 } 1084 return false; 1085 } 1086 1087 /** 1088 * Checks in the cache if a template file exists locally. 1089 * 1090 * @param string $dir Directory location (template path). 1091 * @param string $file Relative template file location. 1092 * @return bool 1093 */ 1094 function template_exists( $dir, $file ) { 1095 if ( '' == $file || '' == $dir ) 1096 return false; 1097 1098 global $wp_templates; 1099 $path = $dir.'/'.$file; 1100 1101 if ( empty( $wp_templates ) ) { 1102 wp_cache_templates( STYLESHEETPATH ); 1103 if ( TEMPLATEPATH != STYLESHEETPATH ) 1104 wp_cache_templates( TEMPLATEPATH ); 1105 } 1106 1107 if ( isset( $wp_templates[$path] ) ) 1108 return true; 1109 1110 //if its a file in a subdirectory, cache that dir 1111 if ( false !== strpos( $file, '/' ) || false !== strpos( $file, '\\' ) ) { 1112 $dir = dirname( $path ); 1113 if ( !isset( $wp_templates[$dir] ) ) 1114 wp_cache_templates( $dir ); 1115 } 1116 return isset( $wp_templates[$path] ); 1117 } 1118 1119 /** 1068 1120 * Require the template file with WordPress environment. 1069 1121 * 1070 1122 * The globals are set up for the template file to ensure that the WordPress