在WordPress或PHP

时间:2016-03-27 22:39:10

标签: php wordpress

在我设置的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')); 
  

您当前脚本中的所有可用变量都将可用   模板文件现在也是。

但是我不确定该代码进入哪个文件以及它要引用哪个文件。

1 个答案:

答案 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()调用。这样,您就可以在同一范围内使用变量。