Мне нужно вернуть несколько значений из функции и распечатать их в моем шаблоне в Wordpress - PullRequest
0 голосов
/ 31 января 2019

Я создал функцию в своем файле 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>
?>

Я ничего не возвращаю.Так что я думаю, что я борюсь с ключевым словом return в WP.Есть мысли?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вам необходимо "перехватить" возвращаемые значения.

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

Переменные, которые используются в функции, не существуют нигде, кроме как в функции.
Когда вы возвращаете значения из функциивам нужно получить их в переменную основной программы.

В этом случае либо в виде массива, либо в виде двух перечисленных переменных

0 голосов
/ 31 января 2019

Я думаю, что ваша проблема в том, что вы вызываете функцию, но вы не сохраняете возврат в переменную, а затем пытаетесь отобразить переменные, которые существуют не только в 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'];
...