将页面分配给模板时,此模板选择将保存在post meta表的键下_wp_page_template
. 这些模板值如下
default
如果未明确设置页面模板{$template}.php
对于根目录中的模板subfolder/{$template}.php
对于子文件夹中的模板,其中子文件夹应为子文件夹的名称
is_page_template()
将传递给它的模板名称中的值与中存储的值进行显式比较
_wp_page_template
. 注意,页面模板由返回
get_page_template_slug()
在…内
is_page_template()
. 如果这两个值不匹配,则返回false
示例:
如果我们有一个名为template.php
我们会将其与is_page_template( \'template.php\' )
, 因为_wp_page_template
对于特定页面template.php
.
当我们将此模板移动到名为subfolder
和reassign 页面模板到页面的_wp_page_template
将是subfolder/template.php
, 显然会失败is_page_template( \'template.php\' )
因为\'template.php\' !== \'subfolder/template.php\'
您需要手动将条件语句调整为is_page_template( \'subfolder/template.php
) 匹配移动到子文件夹,因为我看不到可以安全更改此内容的筛选器。
从注释编辑更改结构,即将模板移动到目录,如前所述,将模板移动到子文件夹会破坏当前结构
重新分配页面模板您需要重新将页面分配到正确的模板。如果移动模板,我们的示例是template.php
正在移入subfolder
)的值_wp_page_template
不会改变。旧值(,即template.php
在我们的示例中,保留为db。考虑到这一点,批量更新所有页面并将正确的页面模板重新分配给页面非常容易。
我们需要做的就是从db中获取旧值,然后使用subfolder/
附加到旧模板名称。我已经写了一个小动作来实现这一点,不需要再手动操作;-)。您只需添加一个页面名称数组,该数组已移动到value
中的参数meta_query
, 这将获得所有分配了这些旧模板的页面,然后您只需附加subfolder/
并重新保存它们。
当操作运行时admin_init
, 您只需加载一次任何管理页面,即可完成。,之后,可以删除该函数。只需注意一点,在运行操作之前,请确保所有值都是正确的,因为它会更改数据库中的值。还将数据库的备份存储在某处
add_action( \'admin_init\', function ()
{
// Get all pages in order to change the template paths to subfolder
$args = [
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'fields\' => \'ids\',
\'meta_query\' => [
[
\'key\' => \'_wp_page_template\',
\'value\' => [\'template.php\'] // Set all the templates you have moved into an array
]
]
];
$q = get_posts( $args );
if ( !$q )
return;
foreach ( $q as $id ) {
// Get the current template name saved
$template = get_post_meta( $id, \'_wp_page_template\', true );
// The name of the subfolder with trailing slash
$subfolder_name = \'subfolder/\';
// Update the templates to add the subfolder name. Change name as needed
update_post_meta(
$id, // Page ID
\'_wp_page_template\', //Meta key under which the page template name is saved
$subfolder_name . $template, //the new value of the template name, in this case subfolder/{$template}.php
$template // Old value of the template name
);
}
});
添加
page-templates/
每个的路径
is_page_template()
我的每一个代码这是正确的。不幸的是,没有其他方法可以做到这一点。如果你有一个好的代码编辑器,你可以在你的主题中批量更新它
我不确定3号。因为我从文章中读到的是,WP默认情况下“知道”模板是否在页面模板/目录中
Wordpress有not 我知道这一点。抄本上又错了一个,又错了一个。Wordpress使用中存储的值_wp_page_template
根据返回的值从根文件夹或子文件夹加载正确的模板。不知道_wp_page_template
, Wordpress将不知道为页面分配了哪个模板以及在哪里查找模板。template.php
表示页面模板位于根目录中,subfolder/template.php
表示模板位于被调用的子文件夹中subfolder
.
通过查看的源代码,可以查看如何为页面加载模板get_page_template()