Я пытаюсь запустить цикл на 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"; ?>
Я не могу получить доступ к массиву, созданному на одной странице, с включенным кодом с другой?
Проблема в том, что вы включаете его из функции.
Функция в PHP имеет свою область видимости.
Включенный файл унаследует пустую область действия функции.
Вы могли бы передать $user
к функции:
function transform($transformation, $user) {
include 'transformations/'.$transformation.'.php';
}
...
<?php transform('user_directory', $user); echo $user->display_name; ?>
Это установит $user
переменная, и сделать ее доступной включенным файлом.
Надеюсь это поможет 🙂
Других решений пока нет …