我需要从一个函数返回多个值,并在Wordpress的模板中打印它们

时间:2019-01-31 16:47:53

标签: php arrays wordpress return

我在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关键字方面很挣扎。有什么想法吗?

2 个答案:

答案 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;

在函数中使用的变量在该函数中不存在,而在其他任何地方。
从函数返回值时,需要将其接收到主程序中的变量。

在这种情况下,要么作为数组,要么作为两个列出的变量