我在Wordpress网站上的大多数页面具有相同的页眉和页脚。标题包括表单,菜单和联系按钮。页脚还包含一个表单。
我有许多页面具有完全自定义的布局。例如。 page-personal-training-landing.php和page-beach-body-ready.php。对于这些页面,我省略了页眉和页脚中的元素。
当前,我正在使用'if not'语句在除那些自定义页面之外的所有页面上显示这些元素...
<?php if ((!is_page( 'contact' ))&&(!is_page('beach-body-landing'))&&(!is_page('4-week-body-transformation'))&&(!is_page('beach-body-ready'))&&(!is_page('personal-training-landing'))){?>
<div class="contact-button"></div>
<?php } ?>
...但是您可以看到这段代码变得很长,在创建新页面时,我会不断为其添加新页面。
我认为模板将是解决方案.. if(!is_page_template('noheadernofooter-page.php')...但不幸的是,Wordpress默认使用该模板布局,然后默认使用自定义页面布局... >
Wordpress的页面模板层次结构选择...
我现在正在考虑,也许我应该使用“高级”自定义字段来添加一些复选框。例如。隐藏标题按钮(是/否),然后查询当前页面上那些按钮的值。
这听起来是最合乎逻辑的解决方案吗?
有人知道没有其他插件怎么做到吗?
谢谢
答案 0 :(得分:2)
我想我在这里找到了最优雅的解决方案...
https://stackoverflow.com/a/36521754/3656408
“您可以创建新的页眉和页脚文件,例如“ header-mytemplate.php”和“ footer-mytemplate.php”。创建所需的结构。在新的临时文件中,将这些页眉和页脚称为“像这样的get_header('mytemplate');和get_footer(mytemplate);。”
如果有人认为有更好的解决方案,我仍然想知道
答案 1 :(得分:0)
我认为,您的做法已经是正确的方法。我可能会添加include以使其更易于维护,但是在我看来,如果要采用声明的方式。看看我使用的一些代码(针对OP进行了修改)作为示例:
if( (is_page( 'contact' ) ) {
include( 'header-contact.php' ); // include this file on contact page
} elseif( is_page('beach-body-landing') ) {
include( 'header-body-landing.php' ); // include that file on body landing page
} else {
get_header(); // otherwise use our normal header
}
不幸的是,没有钩子可以钩住get_header()
,get_footer()
或get_sidebar()
,因为那样我们就可以在一个地方完成所有操作。这只是wordpress开发的本质。
编辑
要包含您在下面提到的内容:您可以这样调整:
if( (is_page( 'contact' ) ) {
get_header('contact'); // use `header-contact.php`
} elseif( is_page('beach-body-landing') ) {
get_header('body-landing'); // use `header-body-landing.php`
} else {
get_header(); // otherwise use our normal header
}
希望这会有所帮助!
答案 2 :(得分:0)
这是另一种方法,如前所述,利用get_header()
:
获取帖子块并将其传递到get_header中。这样,您的页面将始终查找自定义的头文件,但是如果找不到,则WP将默认为标准的header.php:
if ( is_page() ) {
global $post;
get_header( $post->post_name );
}
这确实意味着您将需要为每个页面自定义header.php文件,因此最终可能会有数百个头文件,但是您可以使用符号链接来规避该问题。