这可能是在黑暗中拍摄,但接下来。。。
我知道,从wp 3.4开始,我可以把页面模板aka页面模板。子文件夹中的php。(参考号:Page templates in subdirectories) 这很好,可以帮助我在拥挤的自定义主题文件夹中进行大量订购。
this works - however:
我需要自动创建许多主题激活页面,因此,我使用下面添加的脚本。
but:
如果页面位于子文件夹中,则无法选择/设置页面模板。
The script i use:
$start_number = 2;
$iim_pages = array(\'tools\', \'clients-manager\', \'task-manager\');
foreach($iim_pages as $page) {
$page_title = ucwords(str_replace(\'-\', \' \', $page));
$page_filename = \'page-\'.$page.\'.php\';
$page_check = get_page_by_title($page_title);
$new_page = array(
\'post_type\' => \'page\',
\'menu_order\' => $start_number,
\'post_title\' => $page_title,
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_author\' => 1,
);
if(!isset($page_check->ID)){
$new_page_id = wp_insert_post($new_page);
update_post_meta($new_page_id, \'_wp_page_template\', $page_filename);
// THIS WORKS! : add_post_meta($new_page_id, \'testmeta\', $page_filename);
}
$start_number++;
}
我尝试了许多变体,但wp似乎没有设置页面模板,除非在子文件夹之外
有人能提供解决方案吗?
最合适的回答,由SO网友:Tom J Nowell 整理而成
使用单个页面模板并使用get_template_part
拉入每个页面的唯一部分。
因此,不是:
update_post_meta($new_page_id, \'_wp_page_template\', $page_filename);
您将拥有:
update_post_meta( $new_page_id, \'_wp_page_template\', \'newpagetemplate.php\' );
update_post_meta( $new_page_id, \'sagive_page_type\', $page );
然后在新页面模板中:
$type = get_post_meta( get_the_id(), \'sagive_page_type\', true );
get_template_part( \'parts/type\', $type );
给你一个包含文件的零件文件夹
type.php
,
type-tools.php
etc等
但更可靠的是,您建议这些页面模板用于显示自定义帖子类型。如果这是真的,那么您可以使用归档。php来实现这一点,并使用自定义的post类型归档。这将简化您的代码并允许您使用archive-tools.php
等等,并消除了创建任何页面的需要。