我在function.php中创建了一个函数来检索一些变量。为了清楚起见,在我的项目开始时,我将这些变量放在模板中,并且它们工作正常,但是我想编写更好的代码,所以我想重写我的代码,放入function.php文件,然后调用在我的模板中打印值的功能。
所以现在我的方法有所不同,这是我的示例:
function programpagedata() {
global $post;
$url = $_SERVER['REQUEST_URI'];
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', rtrim($path, '/'));
$campus = $segments[1];
$prog_parent = get_field('program_parent');
$prog_code = get_field('program_code');
$program_parent = $post->post_parent;
$prog_par_details = get_field('program_code', $program_parent );
if( $prog_parent == true ) {
$program = $prog_code;
} else {
$program = $prog_par_details;
}
return array($program, $campus);
}
在我的模板中,我以这种方式调用该函数:
<?php
programpagedata();
echo $program;
echo $campus;
?>
例如,在我的模板中,我可以通过以下方式调用这些函数:
<div class="form-group">
<label for="program">
<input type="hidden" class="form-control" id="program" aria-describedby="programHelp" placeholder="Program" value="<?php echo $program; ?>" name="program">
</label>
</div>
<div class="form-group">
<label for="campus">
<input type="hidden" class="form-control" id="campus" aria-describedby="campusHelp" placeholder="Campus" value="<?php echo $campus; ?>" name="campus">
</label>
</div>
我试图了解我的错误在哪里,因为正如我所说,如果将这个PHP代码段放入模板中,则代码可以正常工作,但有一个重要的区别:
PHP模板
<?php
global $post;
$url = $_SERVER['REQUEST_URI'];
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', rtrim($path, '/'));
$campus = $segments[1];
// $program = end($segments);
$prog_parent = get_field('program_parent');
$prog_code = get_field('program_code');
$program_parent = $post->post_parent;
$prog_par_details = get_field('program_code', $program_parent );
if( $prog_parent == true ) {
$program = $prog_code;
} else {
$program = $prog_par_details;
}
?>
<form>
my template form
</form>
?>
我什么也没退。所以我想我在WP上的return关键字方面很挣扎。有什么想法吗?
答案 0 :(得分:1)
我认为您的问题是您调用了该函数,但没有将返回值保存到变量中,而是尝试回显仅在函数scope中不存在的变量。 / p>
当您从PHP函数中返回某些内容时,必须将该值存储才能使用它,并且函数内部创建的变量在运行该函数的页面上不存在
尝试一下:
//Direct replacement of your template code, doesn't require modification to your function
//store return from function
$return = programpagedata();
//arrays start at 0, and $program is stored at index 0 of $return
echo $return[0];
//$campus is stored at index 1 of $return
echo $return[1];
最好使用实际值而不是编号索引来索引您的退货。
在您的函数中,更改为以下内容:
function programpagedata() {
global $post;
...
return array("program" => $program, "campus" => $campus);
}
然后,您可以这样称呼它:
//Template code if you modify `return` of function using snippet above
//store return from function
$data = programpagedata();
//$program is stored at index 'program' of $data
echo $data['program'];
//$campus is stored at index 'campus' of $data
echo $data['campus'];
答案 1 :(得分:0)
您需要“捕获”返回值。
list($program, $campus) = programpagedata();
echo $program;
echo $campus;
在函数中使用的变量在该函数中不存在,而在其他任何地方。
从函数返回值时,需要将其接收到主程序中的变量。
在这种情况下,要么作为数组,要么作为两个列出的变量