Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在功能范围中访问$post_Php_Wordpress_Loops_Templates - Fatal编程技术网

Php 在功能范围中访问$post

Php 在功能范围中访问$post,php,wordpress,loops,templates,Php,Wordpress,Loops,Templates,在这种情况下,我需要使用foreach循环遍历循环之外的帖子 下面的循环工作得很好,但是,当我将几乎相同的代码迁移到函数中以保持代码干燥时,会出现问题:模板代码重复某些$post元素,如缩略图、标题等,同时返回其他$post元素(如摘录)的预期信息 关于如何在函数内或模板代码中使用$post,这里显然有一些我遗漏或误解的地方,但是,我无法理解这一点 任何澄清都很好 原始代码: $posts=get_字段“特色项目”、“用户”.$post->post_作者; 如果$posts{ $current

在这种情况下,我需要使用foreach循环遍历循环之外的帖子

下面的循环工作得很好,但是,当我将几乎相同的代码迁移到函数中以保持代码干燥时,会出现问题:模板代码重复某些$post元素,如缩略图、标题等,同时返回其他$post元素(如摘录)的预期信息

关于如何在函数内或模板代码中使用$post,这里显然有一些我遗漏或误解的地方,但是,我无法理解这一点

任何澄清都很好

原始代码:

$posts=get_字段“特色项目”、“用户”.$post->post_作者; 如果$posts{ $current_index=0; $grid_columns=3; foreach$posts作为$post{ 如果0==$当前索引%$网格列{ 回响 } 设置\u postdata$post; 获取_模板_零件'零件/回路','自定义网格'; 如果0==$当前索引+1%$网格列 ||$current_index+1==3{ 回响 } $current_index++; } wp_重置_postdata; } 重构为函数:

函数获取网格{ $posts=get_字段“特色项目”、“用户”。get_post->post_作者; 如果$posts{ $current_index=0; $grid_columns=3; foreach$posts作为$post{ 如果0==$当前索引%$网格列{ 回响 } 设置\u postdata$post; 获取_模板_零件'零件/回路','自定义网格'; 如果0==$当前索引+1%$网格列 ||$current_index+1==3{ 回响 } $current_index++; } wp_重置_postdata; } } 循环自定义网格模板代码


当循环位于函数内部时,其他函数不会收到预期的$post。$post变量仅存在于该函数中

解决此问题的一个简单方法是将$post变量放入全局范围:

function get_grid(){
    global $post;
    $posts = get_field( 'featured_projects', 'user_'.get_post()->post_author );
    /* all the other code that works fine outside
       a function should work fine inside too now */
}