将页面模板文件存储在子文件夹中

时间:2018-01-21 作者:The Chewy

我有许多不同格式/布局的法律文件需要在Wordpress网站上显示,但我不想将它们作为单独的页面名称。项目文件夹根目录中的php文件。我知道我可以用get_template_part() 并加载不同的模板文件,但这并不能真正帮助我,因为这些文件的样式都不同。

是否有任何方法可以将页面存储在一个名为(比方说)legal的子文件夹中,然后当人们单击网站上的相应链接时,从该文件夹中提取文件作为完整的页面,否则网站的根文件夹将变得杂乱无章,页面名层出不穷。php文件。

非常感谢

2 个回复
最合适的回答,由SO网友:swissspidy 整理而成

您当然可以使用Page Templates 为此。它们是一种特定类型的模板文件,可以应用于特定页面或页面组。此外,它们还可以存储在子文件夹中。

您只需在模板文件的顶部放置如下内容:

/**
 * Template Name: Legal Page
 */
之后,您可以在管理中编辑页面时选择“法律页面”模板。

SO网友:Jeremy Tarpley

我知道这是一个古老的问题,已经有了答案,但这不是我一直在寻找的解决方案。如果其他人正在搜索将所有WordPress模板文件移动到子文件夹的方法,请添加另一个选项。找到这个code for changing the default folder for WordPress template files 在Reddit上进行了一些小的调整。此代码可以放置在函数中。主题或子主题的php。

/**
 * Tell WordPress that we have moved default template files to the page-templates folder.
 * Based on code from: https://www.reddit.com/r/Wordpress/comments/ffhjvw/moving_wordpress_theme_template_files_to/
 *
 * Related posts with other solutions:
 * https://stackoverflow.com/questions/60589503/moving-wordpress-theme-template-files-to-subdirectory
 * https://wordpress.stackexchange.com/questions/17385/custom-post-type-templates-from-plugin-folder
 * https://wordpress.stackexchange.com/questions/291725/store-page-template-files-in-a-subfolder
 * https://wordpress.stackexchange.com/questions/312159/how-to-move-page-template-files-like-page-slug-php-to-a-sub-directory/312611#312611
 * 
 * Template hierarchy info: 
 * https://developer.wordpress.org/reference/hooks/type_template_hierarchy/
 * https://core.trac.wordpress.org/browser/tags/5.8.1/src/wp-includes/template.php
 * https://developer.wordpress.org/themes/basics/organizing-theme-files/#page-templates-folder
 *
 * @param array $templates A list of candidates template files.
 * @return string Full path to template file.
 */
function change_template_path($templates) {

  // The custom sub-directory for page templates in your theme. 
  $custom_sub_dir = \'page-templates\';

  // Don\'t use the custom template directory in unexpected cases.
  if(empty($templates) || ! is_array($templates)) {
    return $templates;
  }

  $page_template_id = 0;
  $count = count( $templates);
  if($templates[0] === get_page_template_slug()) {
    // if there is a custom template, then our page-{slug}.php template is at the next index
    $page_template_id = 1;
  }

  // The last one in $templates is page.php, single.php, or archives.php depending on the type of template hierarchy being read.
  // Paths of all items starting from $page_template_id will get updated
  for($i = $page_template_id; $i < $count ; $i++) {
    $templates[$i] = $custom_sub_dir . \'/\' . $templates[$i];
  }

  return $templates;
}

// Add filters to override the path for each WP template hierarchy.
// These are all the template hierarchy filters. You should probably only override the ones you need.
add_filter(\'404_template_hierarchy\', \'change_template_path\');
add_filter(\'archive_template_hierarchy\', \'change_template_path\');
add_filter(\'attachment_template_hierarchy\', \'change_template_path\');
add_filter(\'author_template_hierarchy\', \'change_template_path\');
add_filter(\'category_template_hierarchy\', \'change_template_path\');
add_filter(\'date_template_hierarchy\', \'change_template_path\');
add_filter(\'embed_template_hierarchy\', \'change_template_path\');
add_filter(\'frontpage_template_hierarchy\', \'change_template_path\');
add_filter(\'home_template_hierarchy\', \'change_template_path\');
// If you override the index hierarchy, be sure to add an index.php template in your custom template folder.
add_filter(\'index_template_hierarchy\', \'change_template_path\'); 
add_filter(\'page_template_hierarchy\', \'change_template_path\');
add_filter(\'paged_template_hierarchy\', \'change_template_path\');
add_filter(\'privacypolicy_template_hierarchy\', \'change_template_path\');
add_filter(\'search_template_hierarchy\', \'change_template_path\');
add_filter(\'single_template_hierarchy\', \'change_template_path\');
add_filter(\'singular_template_hierarchy\', \'change_template_path\');
add_filter(\'tag_template_hierarchy\', \'change_template_path\');
add_filter(\'taxonomy_template_hierarchy\', \'change_template_path\');

结束

相关推荐

Unable to create directory

最近我注意到,在我将网站上传到另一台服务器后,我似乎遇到了某种上传问题一旦我使用FTP将网站复制并移动到新主机上,我就无法通过wp-admin 因为我得到:无法创建目录。),我无法在帖子或页面上上传媒体,因为我得到:无法创建目录wp-content/uploads/2014/08其父目录是否可由服务器写入?我还注意到wp-admin/theme-editor.php 有一条消息说:“保存更改之前,需要将此文件设置为可写。有关详细信息,请参阅Codex。”我的开发托管服务器上的站点版本上没有此消息,我也没有