【问题标题】:I need to return multiple value from a function and print them in my template in Wordpress我需要从函数返回多个值并将它们打印在 Wordpress 的模板中
【发布时间】:2019-01-31 16:47:52
【问题描述】:

我在我的 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 sn-p 放在我的模板中,代码可以正常工作,但有一个重要区别:

模板中的 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 关键字而苦苦挣扎。有什么想法吗?

【问题讨论】:

    标签: php arrays wordpress return


    【解决方案1】:

    我认为您的问题是您调用了该函数,但您没有将返回值保存到变量中,然后您尝试回显不仅存在于函数的scope 中的变量。

    当您从 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'];
    

    【讨论】:

    • 您提到的第一种方法 ($return = programpagedata();) 结构将是这样的: function programpagedata() { return programpagedata(); } ?
    • 我很喜欢第二个,很优雅
    • @user3833012 为了进一步澄清,我回答中的第一个代码 sn-p 是您问题中第二个代码 sn-p 的直接替换,并且不需要对函数声明进行任何更改。我答案中的最后一个代码 sn-p 是您问题中第二个代码 sn-p 的直接替换,前提是您使用我的答案中的第二个代码 sn-p 修改函数的 return
    • 当然可以,我想了解这两种方法。我试图了解是否可以在函数内部返回函数,我只需要确认。当然第二种方法更好,更有意义,但我想了解两者
    • @user3833012 可以在函数内部返回相同的函数(这是一种递归形式),但在这种情况下,除了让你的代码超时之外,它不会为你做任何事情,因为它会成为一个无限循环
    【解决方案2】:

    您需要“捕获”返回值。

    list($program, $campus) = programpagedata();
    echo $program;
    echo $campus;
    

    函数中使用的变量只存在于函数中。
    当您从函数返回值时,您需要将它们接收到主程序中的变量中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多