我正在开发一个响应性强的WordPress主题,而不是使用框架,我已经创建了一个自己的框架。
我尽量不重复我自己(也就是说,我不想一直写额外的标记),所以我生成的HTML是在.grid-unit div
带有fluid_grid
将函数作为第一个参数的PHP函数。
我正在使用WP_Query
:
function slider_template() {
// Query Arguments
$args = array(
\'post_type\' => \'slides\',
\'posts_per_page\' => 10
);
// The Query
$the_query = new WP_Query( $args );
// Check if the Query returns any posts
if ( $the_query->have_posts() ) {
// I\'m passing an anonymous function here, that needs to be called later on
fluid_grid( function() {
?>
// Here goes the markup that should be printed out later
<?php
} ); // Close the anonymous function, and end the fluid_grid function.
} // End of the if statement
} // End of slider_template function
访问该页面后,我发现以下错误:
Fatal error: Call to a member function have_posts() on null in ...
我试着
$the_query
全球,但结果相同(
$the_query
仍为空)。
有没有可能$the_query
变量在匿名函数中工作?如果是,如何?
最合适的回答,由SO网友:Pieter Goosen 整理而成
这是基本的PHP。在我继续之前,请注意,永远不要全球化变量。Wordpress在这方面已经做了相当糟糕的工作。全球化是邪恶的,因为任何人和任何事,无论是有意还是无意,都可以改变全球变量。这使得globals成为调试的噩梦。总之,NEVER EVER 全球化
每当需要将匿名函数以外的内容传递给该函数时,应使用use()
关键字。例如,您可以尝试
function () use( $the_query )
{
var_dump( $the_query );
}
编辑:在代码中,可以执行以下操作
fluid_grid( function() use ( $the_query )
{
?>
// Here goes the markup that should be printed out later
<?php
} );
SO网友:Chris
我不熟悉fluid_grid
, 但这似乎是一个范围问题。您正在调用中创建匿名函数:
fluid_grid(function() {
});
此函数无权访问
$the_query
. 您需要查看是否可以将查询变量传递给函数,或者尝试将其全球化。
fluid_grid(function() {
global $the_query;
//do stuff
});