Wordpress 尝试输出数组时出现Php错误

Wordpress 尝试输出数组时出现Php错误,wordpress,php,Wordpress,Php,我在自定义帖子类型中有一个可重复的字段,该字段链接到另一个自定义帖子类型。我想循环遍历repeatable字段,然后针对每个字段访问链接文章类型中的数据。返回第一个结果,但在第二个结果中出现以下错误: 致命错误:[]字符串不支持运算符 我尝试从我的变量中删除括号,比如$staff=$coach['team_staff'],但没有成功 我还尝试设置$staff=array();在循环之前,这不起作用 不确定我这里有什么错: global $post; // Get The Staff Membe

我在自定义帖子类型中有一个可重复的字段,该字段链接到另一个自定义帖子类型。我想循环遍历repeatable字段,然后针对每个字段访问链接文章类型中的数据。返回第一个结果,但在第二个结果中出现以下错误:

致命错误:[]字符串不支持运算符

我尝试从我的变量中删除括号,比如$staff=$coach['team_staff'],但没有成功

我还尝试设置$staff=array();在循环之前,这不起作用

不确定我这里有什么错:

global $post;

// Get The Staff Members
$coaches = get_post_meta($post->ID, 'repeatable_fields', true);
if ( $coaches ) :
    foreach ( $coaches as $coach ) :
        $staff[] = $coach['team_staff']; 
        $role[] = $coach['team_role'];

        // Loop through each staff member
        foreach( $staff as $index => $staff ) :
            $args = array (
                'post_type' => 'staff', 
                'title' => $staff
            );

            $posts = get_posts( $args );
            foreach ( $posts as $post ) : setup_postdata ( $post );

                // get post meta here

            endforeach;
        endforeach;

    endforeach;
endif;

您需要小心使用循环变量名。例如,将$staff更改为$staff\u成员:

global $post;

// Get The Staff Members
$coaches = get_post_meta($post->ID, 'repeatable_fields', true);
if ( $coaches ) :
    foreach ( $coaches as $coach ) :
        $staff[] = $coach['team_staff']; 
        $role[] = $coach['team_role'];

        // Loop through each staff member
        foreach( $staff as $index => $staff_member ) :
            $args = array (
                'post_type' => 'staff', 
                'title' => $staff_member
            );

            $posts = get_posts( $args );
            foreach ( $posts as $post ) : setup_postdata ( $post );

                // get post meta here

            endforeach;
        endforeach;

    endforeach;
endif;
理想情况下,您还应该在循环之外初始化阵列、$staff和$role:

$staff = [];
$role = [];
此外,还不清楚为什么要重复添加到$staff数组,并在$coach数组的每次迭代中循环。考虑分离两个FACH循环并逐个运行:

global $post;

// Get The Staff Members
$coaches = get_post_meta($post->ID, 'repeatable_fields', true);
if ( $coaches ) :
    $staff = [];
    $role = [];

    foreach ( $coaches as $coach ) :
        $staff[] = $coach['team_staff']; 
        $role[] = $coach['team_role'];
    endforeach;

    // Loop through each staff member
    foreach( $staff as $index => $staff_member ) :
        $args = array (
            'post_type' => 'staff', 
            'title' => $staff_member
        );

        $posts = get_posts( $args );
        foreach ( $posts as $post ) : setup_postdata ( $post );

            // get post meta here

        endforeach;
    endforeach;

endif;

您的代码设计错误:

  • 第二个foreach嵌套在第一个foreach中,并遍历第一个foreach中填充的数组
    $staff
    。我不知道这是否是故意的,这意味着在第一个foreach的第一个循环中,第二个foreach将迭代一个条目,前两行放入的条目,第二个循环中的两个条目,等等
  • 您的第二个foreach将遍历
    $staff
    命名值时,它当前使用的是
    $staff
    。执行第二个foreach后,以前称为
    $staff
    的数组将消失,并被第一个条目的值覆盖,该值恰好是
    字符串
当第一个
foreach
执行第二个循环时,您的代码因此试图使用索引运算符-
[]
-来处理字符串,如错误所示

试试这个:

global $post;

// Get The Staff Members
$coaches = get_post_meta($post->ID, 'repeatable_fields', true);
if ( $coaches ) :
    $staffs = $roles = array();
    foreach ( $coaches as $coach ) :
        $staffs[] = $coach['team_staff']; 
        $roles[] = $coach['team_role'];
    }
    // Loop through each staff member
    foreach( $staffs as $index => $staff ) :
        $args = array (
            'post_type' => 'staff', 
            'title' => $staff
        );

        $posts = get_posts( $args );
        foreach ( $posts as $post ) : setup_postdata ( $post );
            // get post meta here
        }
    }
}

我在数组中添加了复数形式,以便更明显的是,它们包含多个角色/职员,因为您应用了相同的规则命名另一个数组
$coach
,并在
foreach

中将其值命名为
$coach
:可能重复:我注释掉的$role[]=$coach['team\u role']; 但仍然会出现错误。我尝试了上述文章中的答案,并从$staff=$coach['team_staff']中删除了[];还有一个错误,谢谢。我想我需要嵌套我的foreach循环,以便访问前一个循环中的数据。现在我知道了,当然。数组/变量的作用域不限于循环构造,而仅限于函数或全局。谢谢大家!@RiotAct主要的一点是,您已经摆脱了麻烦。还有一个简单的问题:我后来以$role[$index]的形式访问$role,现在如何访问它?没关系:我想出来了:$roles[$index];