我不会仅仅使用自定义页面模板来更改博客文章索引的布局。将页面模板用于博客文章索引绕过了显示博客文章索引的核心处理(根据模板层次结构,使用home.php
或index.php
渲染)。
编辑我从不。。。在我的问题中说我想改变博客文章“索引”的布局。
是的,这正是你所说的。在WordPress术语中,博客帖子索引是所有博客帖子的默认列表,无论是在网站首页还是静态页面上。配置时Settings -> Reading -> Front Page Displays
像a static page
, 然后将静态页面分配给Posts page
, 然后WordPress使用指定的静态页面显示博客帖子索引。
WordPress使用该页面显示博客帖子索引时,会忽略任何指定的页面模板。它忽略了page.php
样板它始终且仅使用home.php
或index.php
.
因此,如果您强制用户使用自定义页面模板来显示博客帖子索引,那么您就破坏了核心功能的工作方式。为了让用户能够使用您的自定义页面模板,他们必须创建另一个静态页面,然后将您的自定义页面模板分配给该页面。用户必须取消分配给的页面Posts page
在里面Settings -> Reading
, 或者干脆忽略该页面的存在,并将其输出复制到他们为您的自定义页面模板指定的单独静态页面上。
最初的解决方案是,为博客布局定义一个主题选项,然后使用该选项值有条件地包括模板部分文件、有条件地显示侧栏或进行筛选body_class
(或post_class
) 用于CSS更改。
条件模板零件文件
$theme_options = get_option( $option_name );
get_template_part( \'content\', $theme_options[\'blog_layout\'] );
条件侧栏
$theme_options = get_option( $option_name );
if ( \'full\' != $theme_options[\'blog_layout\'] ) {
get_sidebar();
}
过滤器body_class
function wpse141248_filter_body_class( $classes ) {
if ( is_home() ) {
$theme_options = get_option( $option_name );
$classes[] = \'layout-\' . $theme_options[\'blog_layout\'];
}
return $classes;
}
add_filter( \'body_class\', \'wpse141248_filter_body_class\' );
筛选
post_class
基本上是相同的技术。