在我设置的inc / contact-form-processor.php文件中
$form_complete = FALSE;
在我的template-contact.php文件中
<?php
/*
Template Name: Contact Page
*/
?>
<?php require_once 'inc/contact-form-processor.php'; ?>
<?php get_header();
$SidebarPosition = sidebar_position()[0];
$IndivSidebarPosition = sidebar_position()[1];
$DefaultSidebarPosition = sidebar_position()[2];
?>
<div class="container">
<div class="row">
<?php if ( $SidebarPosition == 'left' ) {
get_template_part( 'layouts/contact/left', 'sidebar' );
}
if ( $SidebarPosition == 'right' ) {
get_template_part( 'layouts/contact/right', 'sidebar' );
}
if ( ( $IndivSidebarPosition == 'none' ) || ( $IndivSidebarPosition == 'default' and $DefaultSidebarPosition == 'none' ) ) {
get_template_part( 'layouts/contact/no', 'sidebar' );
}
?>
<?php echo $IndivSidebarPosition = sidebar_position()[1]; ?>
</div>
</div>
<?php get_footer(); ?>
我认为通过使用require一次然后引用联系表单处理器文件$ form_complete将在此文件和随后的默认值
中可用get_template_part( 'layouts/contact/right', 'sidebar' );
根据条件显示联系表单
<div id="contact_form">
<?php if($form_complete === FALSE) { ?>
<form>
.. Form ...
</form>
<?php } ?>
</div>
但是,表单不会显示,当我检查$ form_complete变量时,它是空的。如何将变量传递给两个文件,我已经读过我可以使用
您可以在PHP中使用WordPress locate_template函数 包括()。这是这样做的:
include(locate_template('your-template-name.php'));
您当前脚本中的所有可用变量都将可用 模板文件现在也是。
但是我不确定该代码进入哪个文件以及它要引用哪个文件。
答案 0 :(得分:1)
您的问题与范围有关。该片段没有神奇的技巧
include(locate_template('your-template-name.php'));
定位模板只返回文件名(它在主题中查找以查找相应的文件,通常用于允许通过子主题覆盖)。与您相关的是include
将文件加载到与调用它的函数/行相同的范围内。
让我们看一下:
$a= 'im outside scope';
$b = 'im outside scope but get passed into the function so i can be used';
function sample($var){
$c= 'in scope';
$d= $var;
include 'template.php';
}
sample($b);
的template.php
<?php
echo $a; // ''
echo $b; // ''
echo $c; // 'in scope'
echo $d; // 'im outside scope but get passed into the function so i can be used'
因此,如果你使用get_template_part(),这是一个函数,只有你传递给函数的变量(在参数中,通过调用globals,类props)将在模板中可用,get模板部分不接受您可以使用的参数。
所以解决方案是用include调用替换你的get_template_part()
调用。这样,您就可以在同一范围内使用变量。