Как переименовать файл шаблона?

Если у меня есть страницы, указывающие на somefilename.php и вы хотите изменить имя файла на betterfilename.php , могу ли я оставить комментарии к шаблону без изменений без изменения всех страниц?

 /* Template Name: Some File Name */ 

Solutions Collecting From Web of "Как переименовать файл шаблона?"

Когда вы выбираете шаблон страницы, WordPress сохраняет его как postmeta с ключом _wp_page_template . Значение, которое хранится, является фактическим шаблоном шаблона страницы относительно каталога шаблона (или каталога стилей).

Поэтому, когда WP ищет шаблон для включения, он будет для somefilename.php и когда он его не найдет, он вернется на page.php .

Вы можете видеть файлы, которые ищет WP в функциях get_page_template и get_page_template_slug

 <?php // in wp-includes/template.php /** * Retrieve path of page template in current or parent template. * * Will first look for the specifically assigned page template * The will search for 'page-{slug}.php' followed by 'page-id.php' * and finally 'page.php' * * @since 1.5.0 * * @return string */ function get_page_template() { $id = get_queried_object_id(); $template = get_page_template_slug(); $pagename = get_query_var('pagename'); if ( ! $pagename && $id ) { // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object $post = get_queried_object(); $pagename = $post->post_name; } $templates = array(); if ( $template && 0 === validate_file( $template ) ) $templates[] = $template; if ( $pagename ) $templates[] = "page-$pagename.php"; if ( $id ) $templates[] = "page-$id.php"; $templates[] = 'page.php'; return get_query_template( 'page', $templates ); } // in wp-includes/post-template.php /** * Get the specific template name for a page. * * @since 3.4.0 * * @param int $id The page ID to check. Defaults to the current post, when used in the loop. * @return string|bool Page template filename. Returns an empty string when the default page template * is in use. Returns false if the post is not a page. */ function get_page_template_slug( $post_id = null ) { $post = get_post( $post_id ); if ( 'page' != $post->post_type ) return false; $template = get_post_meta( $post->ID, '_wp_page_template', true ); if ( ! $template || 'default' == $template ) return ''; return $template; } 

Лучшее решение: обновите свои страницы. Другое, менее ручное решение: page_template в page_template и найдите старое имя файла, замените его новым:

 <?php add_filter('page_template', 'wpse57568_page_template'); function wpse57568_page_template($t) { $old_slug = 'pages/t.php'; // replace this $new_slug = 'pages/new.php'; // replace this $page_id = get_queried_object_id(); $template = get_post_meta($page_id, '_wp_page_template', true); if($template && 'default'!= $template && $old_slug == $template) { if(file_exists(trailingslashit(STYLESHEETPATH) . $new_slug)) { $t = trailingslashit(STYLESHEETPATH) . $new_slug; } elseif(file_exists(trailingslashit(TEMPLATEPATH) . $new_slug)) { $t = trailingslashit(TEMPLATEPATH) . $new_slug; } } return $t; } 

Как плагин .

Крис дал мне хорошее представление, и я ценю функцию фильтра. Но я закончил смену db через phpMyAdmin:

 UPDATE wp_postmeta SET meta_value = 'new-filename.php' WHERE meta_value = 'old-filename.php';