wordpress — Почему PHP, включенный через функцию, возвращает результат, отличный от PHP в основном файле?

Я пытаюсь запустить цикл на WordPress, который возвращает информацию о пользователе. Когда у меня есть PHP-код для отображения результатов в том же файле, что и запрос, он работает как ожидалось. Однако, если я использую include чтобы получить доступ к преобразованию, хранящемуся в другом месте, он не возвращает никакой информации, даже если код во включенном файле идентичен. С чего бы это?

Мой цикл ниже:

<?php

// The Query
$user_query = new WP_User_Query( array( 'include' => array( 1, 2, 3 ) ) );
// User Loop
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
?>

<?php transform('user_directory'); echo $user->display_name; ?>

<?php
}
} else {
echo 'No users found.';
}
?>

Transform это простая функция, которая включает в себя еще одну страницу по имени:

function transform($transformation) {
include 'transformations/'.$transformation.'.php';
}

В этом случае echo команда работает, тогда как включенный файл (через Transform) не Включенный файл определенно найден и прекрасно отображает другой HTML и PHP-код, просто он не может найти ничего под $user,

Код, содержащийся во включенном PHP-файле:

<?php echo $user->display_name; //Won't return this text
echo "It returns this text fine"; ?>

Я не могу получить доступ к массиву, созданному на одной странице, с включенным кодом с другой?

0

Решение

Проблема в том, что вы включаете его из функции.
Функция в PHP имеет свою область видимости.
Включенный файл унаследует пустую область действия функции.
Вы могли бы передать $user к функции:

function transform($transformation, $user) {
include 'transformations/'.$transformation.'.php';
}

...

<?php transform('user_directory', $user); echo $user->display_name; ?>

Это установит $user переменная, и сделать ее доступной включенным файлом.

Надеюсь это поможет 🙂

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]